dubbo中的那些“坑"(2)-hessian-lite字符串数据定义改进

其实这个不算是一个坑,阿里实现的字符串协议挺好的,但是由于我个人的强迫症和在编写php客户端过程中对字符串的输出和解析感觉很别扭,尤其是字符串数据很大时,必须一个字节一个字节的判断处理,让我很郁闷,明显和我当年编写汇编时的哪种精致不符。体现在两个方面

1.字符串的格式定义为 字母S或者R + 两个字节的数据长度(MSB)+ utf8格式的字节数组,S表示最后一个块,上面那个长度是unicode

字符串的长度,不是自己数组的长度,即"中国"这个词,长度是2,utf8表示的字节数组确实6个字节

2.我的php客户端是用c混合c++编写的php扩展,输出字符串时首先调用libmbfl库计算unicode字符串的长度,然后输出utf8数据,因为在php中,我们默认采用utf8格式,字符串zval已经是utf8格式了,并且附带一个utf8长度的整数,

3.读取应答分析字符串时,根据上面的长度并不知道该分配多少内存来接受整个字符串,因为长度和utf8的字节长度根本没有关系,还有多个节时防止utf8字母被分配到多个不同的chunk上面

4.因此,我们重新定义了一个字符串数据协议, E +4字节UTF8字节长度(MSB)+ utf8表示一个完整的字符串,4字节时,表示的数据有2^31-1个utf8字节,可以表示好几百兆的汉字,够用了,这样我们可以使用c语言的memcpy函数进行快速数据拷贝和数据缓冲区分配了

5.经过测试,大量字符串的数据传输性能能提高5%


转载于:https://my.oschina.net/aruan/blog/351606

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值