一种适用于物联网通信的报文编解码组件设计
2017-05-30傅启明高沈钢
傅启明 高沈钢
【摘 要】随着物联网技术的广泛应用,物联网设备与服务器通信的模块越来越多,通信报文种类也逐渐增多,导致编解码工作量不断增加。文章提出一种适用于物联网通信的通用网络报文编解码组件设计方案,通过配置报文的识别码和格式定义,无需针对每种报文编写不同的编解码代码即可完成报文的编码和解码操作,提高了生产效率。
【关键词】物联网;报文;编解码
【中图分类号】TP391.9 【文献标识码】A 【文章编号】1674-0688(2017)05-0030-03
0 引言
物联网(IoT)是物与物相连(通过定位、识别、感应和监控等技术将设备连接管理)的互联网,物联网通信的报文即物联网设备与服务器通信的数据单元。在物联网的通信模块中,将网络传输数据转化为物联设备的内存数据为解码,反之则为编码。一般的做法是针对不同的报文,编写不同的报文编解码。在物联网设备报文种类不多的情况下,报文编解码的开发工作量是可控的。但随着物联网技术应用的广泛深入与拓展,报文编解码开发的工作量会越来越大且难以维护。因此,从开发和运维中节约成本及减少工作的复杂度方面考虑,迫切需要一套通用灵活的报文编解码设计方案。
1 总体框架
报文编解码框架涉及2个数据对象:网络报文数据和的内存报文对象。其中,网络报文数据为物联网络中传输的未解析二进制数据流,内存报文数据为解析完成后的物联设备中有明确业务意义的数据对象。编解码框架主要有2个功能:将内存报文对象编码为网络报文数据、将网络报文数据解码为内存报文对象。
分析物联网设备与服务器的通信报文,可以发现如下特性:报文中一般都存在不可分割的最小数据单元,这些数据单元一般都对应一个特定的业务属性,整个报文数据都是通过这些数据单元组织起来的,同时对于每种报文都有一个区分与其他报文的特征码。针对这些特性,可以用有序Map的数据结构来设计报文的内存对象。组件框架设计如图1所示。
组件主要完成网络报文数据和内存报文对象的互相转换。组件的主体结构由报文配置和编解码功能组成。存在的配置数据分为2类:报文特征码和格式定义。配置数据为本组件对开发人员开放的部分,通过配置不同的数据以解析不同的报文。
在框架中,报文编解码组件有3个主体功能模块:报文识别、报文反序列化、报文序列化。
2 配置与模块设计
2.1 报文配置数据设计
特征码(MsgSignature):描述了报文区别于其他报文的特征,通过对各种报文的分析,设计如下几种内置特征码便于开发。例如,以固定内容结尾的特征码(EndTokenSignature)、在固定位置存放固定内容的特征码(FixedPosContentSignature)。
格式定义(MsgFomat):报文中的数据一般都是一块接着一块存放,用以描述相关的业务信息。此处的格式定义是一个一个数据单元描述的汇总。每个数据单元描述了最基本的数据定义,定义中包括了数据类型和数据的转换逻辑。通过对大量报文的分析,我们初始化内置如下数据单元定义(见表1)。
2.2 报文识别模块设计
报文识别(MsgIdentification)模块通过对报文特征码的提取来识别报文类别。接收一段报文时,首先通过调用报文识别模块进行识别。识别模块的流程设计如图2所示。
2.3 反序列化模块设计
当判断出具体类型的报文后,即进入报文反序列化(Msg Deserialization)模块。报文反序列化模块将网络二进制数据对照报文的格式定義,逐块解析直到报文格式完全分析完,最终生成有业务意义的内存数据对象。反序列化模块的流程设计如图3所示。
2.4 序列化模块设计
相较于之前的模块,报文序列化模块(MsgSerialization)实现更简单。它将内存中有业务意义的数据对象转化为二进制数据流的网络对象。只需循环遍历报文定义中的每个数据单元,把对应的数据转换为二进制流即可。序列化模块的流程如图4所示。
3 结语
本文设计的报文编解码组件主要面向开发人员。开发人员通过分析报文特征和格式,然后用配置数据来描述报文,以完成报文的编解码操作。从开发的角度来看,由于代码只有通用的编解码部分,并未针对某种特定的报文,因此开发的工作量减少了;从运维角度来看,所有的报文特征码和格式统一配置,使得配置数据与代码剥离,因此更便于分析和维护了。
参 考 文 献
[1]王保云.物联网技术研究综述[J].电子测量与仪器学报,2009,23(12):1-7.
[2]罗捷,潘江峰,耿修堂.某协议报文编解码模块的设计与实现[J].火炮发射与控制学报,2013(3):37-40.
[3]刘相,刘泽平.可变报文格式编解码模块设计与实现[J].电讯技术,
2016,56(11):1260-1266.
[责任编辑:钟声贤]