Protocol buffer序列化及其在微信蓝牙协议中的应用

本文详细介绍了Protocol Buffer作为数据序列化工具在微信蓝牙协议中的使用,对比了它与XML的性能优势,并解析了微信蓝牙协议的包结构和PushReq包的序列化过程。同时,阐述了Protocol Buffer的打包规则,以及在微信硬件公众平台智能控制方案开发中的作用。
摘要由CSDN通过智能技术生成

       Protocol buffer是Google出品的一种轻便高效的结构化数据存储格式,可对结构化数据进行序列化,并具有语言无关、平台无关等特点,在通信协议和数据存储等领域已经得到广泛的应用。目前其已经提供 C/C++、Java、Python 等语言的 API。

一、Protocol buffer和XML

在数据通信传输时,一般需要将结构化的数据序列化成流进行传送,接收方再反序列化为原始格式数据进行处理。在Web通信领域,XML应用算是最通用的了。在时间性能上,虽然XML的序列化开销还可以,但是反序列化的效率是比较差,而Protocol buffer的反序列化效率是比较高的;在空间性能上,Protobuffer采用了可变长的数据编码格式,比XML的字符格式要高效得多。Google集群要处理PB级数据,Protocolbuffer能够在时间和空间性能上有所改进,在整体效益而言就是相当可观的。

正是基于以上原因,微信和蓝牙外设的通信协议采用了Protocol buffer对消息包体进行打包。本文的目标是讲述Protobuffer在蓝牙微信协议中的应用,有助于理解微信蓝牙协议,对微信发给蓝牙外设的消息数据流进行反序列化,得到原始的结构化格式数据。因此语法也是围绕微信蓝牙协议包展开。更加详细的语法请百度相关内容或者找笔者探讨。

二、微信蓝牙外设协议通用格式

微信蓝牙使用流进行传输,在流上传输的是一个接着一个的业务逻辑的数据包。把设备发往厂商服务器或者微信服务器的请求包称为Req,回复包称为Resp,一个请求对应一个回包。把厂商服务器或者微信服务器主动发往设备的请求包称为PushReq。

包结构由定长包头和变长包体组成,其中包体即由Protocol buffer进行打包。


其中,定长包头为8个字节,bMagicNumber为0xFE;bVer为版本01;nLength为包长,包括包头和包体的长度;nCmdId为命令编码,如登陆授权,初始化,发送数据,push推送等等;nSeq为序列号,PushReq包的序列号固定为0,其他请求和回复包的序列号务必保持一致,每次请求后序列号加1.<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值