(7)序列化与压缩

因为ServiceObject的函数签名格式是统一的,可以传递的参数只有一个AParams:OLEVariant,客户端的多个参数需要使用数组传递。如:

但是这种方式不太直观,AParams内部的元素严重依赖顺序,一旦写好,很难改变。另一种方式是使用序列化的Object,如:

使用某种编码方式,把这个元件序列化成一个stream,这样就很容易传递到服务器,服务器的ServiceObject再把stream反序列化TMarshalSumParams。

序列化在delphi中,有两种方式可以利用:

1、使用TWriter和TReader。这两个元件,是delphi用来读写其dfm文件的,你在剪切/黏贴元件时,也是它们在工作。但是两个元件只写元件published属性,也没有专门考虑来做客户端服务器的序列化,所以任何published不支持的数据类型,它都不处理,如动态数组,Variant也只支持byte数组。这里需要修改。TWriter写出的是二进制流,效率比文本高。

2、使用SOAP对TRemotable元件的编码方式,编码成XML格式。同样它对Variant只支持byte数组,如果你要支持别的variant类型,需要自己改造。需要说明的是,XML编码效率比较低,数据量越大越明显。

 

在Delphi2010的时候,支持了Json格式的序列化,它应该是比XML更高效的一种方式。

一旦序列化成stream,我们就可以使用任何压缩方式在传递前压缩,如zlib,leo,等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值