一种协议传输的粘包、拼包的方法与流程

文档序号:15151918发布日期:2018-08-10 21:12阅读:1322来源:国知局

本发明涉及数据处理技术领域,具体为一种协议传输的粘包、拼包的方法。



背景技术:

在现今物联网领域中关于按指定协议规则对数据包进行网络传输过程中,行业内对tcp通讯方式发送数据包,粘包以及拼包的技术略显臃肿和低效率性,不完全应跟进今后物联网发展步伐,以及今后物联网的多变性。



技术实现要素:

本发明的目的在于提供一种协议传输的粘包、拼包的方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:一种协议传输的粘包、拼包的方法,包括以下步骤:

a、首先介绍一下整个方案需要基于分布式部署架构下运行;

b、在此指定完善的通讯协议,以通用的标示位作为消息单一消息边界,按定制的算法捕获消息边界标示位,构建完整报文;

c、对数据进行初次处理;

d、针对于上述的异或校验进行说明;

e、在基于严密消息接收处理的同时,定制基本数据模型去格式化接收到的完整报文。

优选的,所述步骤c中数据进行初次处理时制定相应的处理拼包和粘包的逻辑算法,包括如下步骤:

a、首先定义好全局buffer,然后对接收到的数据容量进行判断;

b、若接收到的数据量为空就结束了此次处理,否则往下进行;

c、得到原始数据可能是上次没有传完的参与数据,通过7e标示位以及全局buffer里的数据将两次接收到报文进行粘包处理,得到完整报文;

d、若得到新的报文数据也通过获取数据中的边界标示符,得到新的报文;

e、若新的报文能一次接受完,即存储在全局buffer中等待下一次数据上报进行粘包处理;

f、若接收完整即可对数据进行转义操作,紧接着对异或校验码进行验证,校验成功继续,校验失败证明数据有误,进行丢弃;得到校验成功数据后根据协议判定数据是否需要解密和解压,最终得到原始数据。

优选的,所述步骤d中在协议层面对需要接收的数据,进行数据校验位的制定,在接收时基于定制的校验方式对相应的校验位进行验证,实现过程如下:在出去标示位的前提先,校验码计算以消息头开始,同后一字节进行异或运算,直到校验码前一个字节,占用一个字节。

与现有技术相比,本发明的有益效果是:本发明主要基于apachemina高性能和高伸缩性网络应用程序的框架下,针对现今快速发展的物联网领域里,设备与设备、设备与平台、平台与平台之间的tcp传输控制协议通讯方式的网络数据通信,以指定通讯协议规则的方式对传输中的数据包的粘包、拼包等操作进行严密处理,解决了物联网行业内按一定通讯协议进行数据包传输过程中对数据包粘包、拼包方案进行整合,在高效同时低资源消耗的前提下,实现了较为严密的数据包粘包、拼包处理。

附图说明

图1为本发明分布式部署架构图;

图2为本发明拼包和粘包的逻辑算法图;

图3为本发明数据传世协议图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1-3,本发明提供一种技术方案:一种协议传输的粘包、拼包的方法,其特征在于:包括以下步骤:

a、首先介绍一下整个方案需要基于分布式部署架构下运行;由于在物联网行业设备接入本来就是需要庞大的流量支撑,所以必然需要负载均衡,在这种环境下把我们处理粘包和拼包的方案进行融入到具体的每个服务中,在这样的前提下进行实施,图土1所示;

b、在此指定完善的通讯协议,以通用的标示位作为消息单一消息边界,按定制的算法捕获消息边界标示位,构建完整报文;在每一次长连接时,对于粘包或半包的处理也是基于报文消息边界标识符对其进行报文拼接构建;

采用0x7e表示为边界标示位,若校验码、消息头以及消息体中出现0x7e,则要进行转义处理,转义规则定义如下:

0x7e<——>0x7d后紧跟一个0x02;

0x7d<——>0x7d后紧跟一个0x01。

转义处理过程如下:

发送消息时:消息封装——>计算并填充校验码——>转义;

接收消息时:转义还原——>验证校验码——>解析消息。

示例:发送一包内容为0x300x7e0x080x7d0x55的数据包,则经过封装如下:0x7e0x30

7d0x020x080x7d0x010x550x7e。

而针对于整个数据包的数据构造的顺序如下图,首先按照协议构建原始数据,然后根据具体需求对原始数据压缩,之后也更不同情况对消息体加密,接下来采用异或的方式生成校验,最后以之前介绍过的方式进行转义操作。

c、对数据进行初次处理:对于不同协议、不同设备,在不同时刻下向我们的系统进行数据接入,每次接入为一次长连接,也属于一次会话,每次会话分配不同的内存进行处理,在不同会话里以相同逻辑的parser解码器,对数据进行初次处理。

d、针对于上述的异或校验进行说明;

e、在基于严密消息接收处理的同时,定制基本数据模型去格式化接收到的完整报文;基于这种可拓展且简洁的基类数据模型以此应对今后在多变的数据传输协议。如上面部分所述,得到原始数据后采用统一的数据模型(gpsmessage)进行接收。原始数据的二进制流,以gpsmessage中的类型为byte[]的成员变量所接收。同时gpsmessage也提供存储原始数据里的流水号、imei(设备唯一识别码)、消息id、消息体属性、校验码等。而这个是最初的二进制流格式化成java数据模型。而具体的解析需要根据具体的规则进行二次处理,以此满足多元化数据协议。

本发明中,步骤c中数据进行初次处理时制定相应的处理拼包和粘包的逻辑算法,包括如下步骤:

a、首先定义好全局buffer,然后对接收到的数据容量进行判断;

b、若接收到的数据量为空就结束了此次处理,否则往下进行;

c、得到原始数据可能是上次没有传完的参与数据,通过7e标示位以及全局buffer里的数据将两次接收到报文进行粘包处理,得到完整报文;

d、若得到新的报文数据也通过获取数据中的边界标示符,得到新的报文;

e、若新的报文能一次接受完,即存储在全局buffer中等待下一次数据上报进行粘包处理;

f、若接收完整即可对数据进行转义操作,紧接着对异或校验码进行验证,校验成功继续,校验失败证明数据有误,进行丢弃;得到校验成功数据后根据协议判定数据是否需要解密和解压,最终得到原始数据。

本发明中,步骤d中在协议层面对需要接收的数据,进行数据校验位的制定,在接收时基于定制的校验方式对相应的校验位进行验证,实现过程如下:在出去标示位的前提先,校验码计算以消息头开始,同后一字节进行异或运算,直到校验码前一个字节,占用一个字节。

本发明主要基于apachemina高性能和高伸缩性网络应用程序的框架下,针对现今快速发展的物联网领域里,设备与设备、设备与平台、平台与平台之间的tcp传输控制协议通讯方式的网络数据通信,以指定通讯协议规则的方式对传输中的数据包的粘包、拼包等操作进行严密处理,解决了物联网行业内按一定通讯协议进行数据包传输过程中对数据包粘包、拼包方案进行整合,在高效同时低资源消耗的前提下,实现了较为严密的数据包粘包、拼包处理。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1