一种节省网络带宽的通信协议编码方法与流程

文档序号:32155885发布日期:2022-11-11 23:06阅读:83来源:国知局
一种节省网络带宽的通信协议编码方法与流程

1.本发明涉及一种节省网络带宽的通信协议编码方法,属于网络通信领域软件设计和开发技术领域。


背景技术:

2.在网络通信中,在发送数据前,我们需要对数据以一定的格式进行编码,然后发送到网络中;在对方收到数据后,以编码相反的方法对数据进行解码,从而获得对方的真实数据。
3.在进行数据编码时,需要对各个字段进行逐个排列,常见对通信协议的编码方法有:
4.(1)定长文本方式编码;
5.(2)带分隔符的可变长度的文本方式编码;
6.(3)二进制编码;
7.(4)xml格式等;
8.(5)压缩后传输。
9.不同的场合一般选用不同的编码方法。每种方法都有各自的优缺点,比如,二进制比文本方式节省网络带宽,但人工读取困难;变长比定长节省带宽,但变长对计算机编程来说处理更复杂。xml的人工可读性强,但对网络带宽的消耗上几乎是最大的,且一般必须依赖于第三方库对实体进行转换。
10.为了节省网络带宽,还有人对数据压缩后再进行发送,从而节省带宽。经测试,由于压缩数据消耗的cpu资源太多,对于实时通信这种方式基本不可行,得不偿失。因此,除非在非实时通信中,实时通信应用中几乎无人采取压缩方式。


技术实现要素:

11.本发明的目的在于提供一种节省网络带宽的通信协议编码方法,以解决上述背景技术中提出的问题。
12.为实现上述目的,本发明提供如下技术方案:一种节省网络带宽的通信协议编码方法,所述方法包含编码流程和解码流程,其编码流程包括第1步至第5步,其解码流程包括第 6步至第8步:
13.第1步,对数据包编入数据内容;
14.第2步,对要编码的字段进行分组;
15.第3步,对每个字段根据不同的数据类型分别进行如下预处理;
16.第4步,将分组后的字段编码排列到通信包中;
17.第5步,进行常规处理;
18.第6步,对数据包进行解析;
19.第7步,对分组的字段进行解析;
20.第8步,进行常规处理。
21.优选地,所述第2步对要编码的字段每四个一组进行分组,末尾不足四个的字段为一组。
22.优选地,所述第3步预处理的方式包括但不限于对有符合型、无符号型、字符串类型、浮点类型进行预处理。
23.优选地,所述第5步的常规处理包括但不限于加入包尾的校验字段。
24.优选地,所述第8步的常规处理包括但不限于解析校验字段。
25.与现有技术相比,本发明的有益效果是:
26.(1)节省网络流量大约35%。
27.假设一个数据包中有70%的存储空间为整型,其它为浮点或字符串。由于大多数情况下,整型都是小数字、字符串也都比较短,尤其在金融行业更是如此,整型通常都可以使用不超过1个字节或2个字节表示,而在电脑中我们经常采用4字节或8字节的长度来表示,造成超过一半的字节浪费。假设整型的浪费了50%的空间(在本发明中,虽然在每组前补充了一个字节,但对于大量超过一半长度浪费的整型而言,这一个字节微不足道),那么整体浪费率为70%*50%=35%。也就是说,采用本发明,大多数情况下,可以减少35%的数据包大小,或者说节省35%的网络流量,或带宽消耗。
28.比如,金融行业的行情价格、申报数量等,去掉小数点后,数据大小一般都不会超过 65535,但我们又不能完全排除超过65535的这种可能性。比如95%股票价格不会超过655 元,但贵州茅台超过1000元,如果在网络传输中一刀切都使用4个字节表示就非常浪费,而采用本通信协议的编码方法,就可以节省大量带宽。
29.(2)相对于固定长度的字段编码方法,本编码方法对整型数据范围处理灵活,避免因少量超出范围的数据导致对通信协议的变更,提高通信协议和软件的适应性。
30.传统的固定长度的字段无法对数据的长度进行扩展,万一将来遇到超出预期的数据范围,则该通信协议变得无效,只能重新设计通信协议,通信双方需要对软件进行重新开发,造成大量成本。而本编码方法对无论几个字节表示的整型数据的编码方法统一,避免了因使用中数据范围扩大,导致的通信协议的重新设计和软件的重新编码问题。
31.(3)本编码方法与压缩编码相比,本方法对cpu没有显著的消耗,具有较强的实用性。而压缩编码方式,在实时通信中基本无法实用。
附图说明
32.图1为本发明的分组信息示意图。
具体实施方式
33.下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
34.本发明提供一种技术方案:采用二进制进行编码。暂不考虑通信协议包头,包头一般较短,采用常规方式即可。本文只考虑一个个字段的编码方式。
35.一、具体编码流程如下:
36.编码是指发送前对数据进行打包,形成一个数据流,最终通过网络发送。
37.第1步:对数据包编入协议包头等内容。
38.第2步:对要编码的字段每四个一组进行分组,末尾不足四个的字段为一组。
39.第3步:对每个字段根据不同的数据类型分别进行如下预处理:
40.(1)有符号整型(无论是1个、2个、4个或8个字节的整型):
41.①
如果该整型范围是[-128,127],即1个字节就可以表示,则强制转换为一个字节的有符号整型;
[0042]

如果该整型范围不在上述范围,同时又在[-32768,32767]的范围,即2个字节就可以表示,则强制转换为两个字节的有符号整型;
[0043]

如果该整型范围不在上述范围,同时又在[-2147483648,2147483647]的范围,即4 个字节就可以表示,则强制转换为四个字节的有符号整型;
[0044]

其它情况(指不在以上范围的int64),则不进行转换。
[0045]
(2)无符号整型(无论是1个、2个、4个或8个字节的整型):
[0046]

如果该整型范围是[0,0xff],即1个字节就可以表示,则强制转换为一个字节的无符号整型;
[0047]

如果该整型范围是[0x100,0xffff],即2个字节就可以表示,则强制转换为两个字节的无符号整型;
[0048]

如果该整型范围是[0x10000,0xffffffff],即4个字节就可以表示,则强制转换为四个字节的无符号整型;
[0049]

其它情况(指大于0xffffffff的uint64),则不进行转换。
[0050]
(3)字符串类型:该类型将使用长度+字符串内容的方式进行排列。对于其中的长度,采用与上述无符号整型相同的方式存储。
[0051]
(4)浮点类型(包括float单精度和double双精度):不转换,直接使用二进制数据。
[0052]
第4步:将上述每四个字段一组的方式编码排列到通信包中,具体流程如下:
[0053]
(1)先写入二进制的一个字节整数(对一个字节的整型,大小端字节序是同样的,所以,不必转换),我们称作分组信息。如图1所示。由于每个字节有8位,这8位等分成四个部分,每2位表示随后本组对应字段中数值的长度。也就是说:
[0054]
第1至2位,表示随后本组中第1个字段中数值的长度。
[0055]
第3至4位,表示随后本组中第2个字段中数值的长度。
[0056]
第5至6位,表示随后本组中第3个字段中数值的长度。
[0057]
第7至8位,表示随后本组中第4个字段中数值的长度。
[0058]
其中,每2位只能表示0、1、2、3四个可能的值,其含义为:
[0059]
0:表示随后的对应字段中数值长度为1个字节。
[0060]
1:表示随后的对应字段中数值长度为2个字节。
[0061]
2:表示随后的对应字段中数值长度为4个字节。
[0062]
3:表示随后的对应字段中数值长度为8个字节。
[0063]
对于最后一组,如果不足4个字段,可以将相应位置填充为0即可。
[0064]
(2)紧接着按顺序写入本组的四个字段,每个字段的格式如下:
[0065]

如果是字符串类型,则按顺序写入上述方法已经预处理好的长度(大端字节序表示法)和字符串内容。
[0066]

如果是浮点类型(包括float单精度和double双精度),则直接写入相应大端字节序的二进制内容。
[0067]

如果是整型类型,包括有符号和无符号整型,则写入上述方法已经预处理好的整型 (大端字节序法)。
[0068]
第5步:其它常规处理,比如加入包尾的校验字段等。由于属于常规处理,不属于本发明的范围,因此,不再赘述。
[0069]
具体解码流程如下:
[0070]
解码是指从网络中接收到数据后,进行解包,从而原始信息的过程。
[0071]
第1步:对数据包解析包头等内容。由于不属于本发明的内容,本处不进行详述。
[0072]
第2步:对每一个四字段的分组进行循环解析,流程如下:
[0073]
(1)先解析一个字节的分组信息:
[0074]
第1至2位,表示随后本组中第1个字段中数值的长度。
[0075]
第3至4位,表示随后本组中第2个字段中数值的长度。
[0076]
第5至6位,表示随后本组中第3个字段中数值的长度。
[0077]
第7至8位,表示随后本组中第4个字段中数值的长度。
[0078]
其中,每2位只能表示0、1、2、3四个可能的值,其含义为:
[0079]
0:表示随后的对应字段中数值长度为1个字节。
[0080]
1:表示随后的对应字段中数值长度为2个字节。
[0081]
2:表示随后的对应字段中数值长度为4个字节。
[0082]
3:表示随后的对应字段中数值长度为8个字节。
[0083]
对于最后一组,如果不足4个字段,可以将剩余部分忽略。
[0084]
(2)依次解析本组中的第1、2、3、4个字段。
[0085]
每个字段的数据类型,需要根据双方的约定来确定。同时需要注意转换为本机字节序。对于本机整型的存储长度,只能大于或等于收到的长度值,否则一定是存在错误。
[0086]
如果最后一个分组不足四个字段,则剩余部分忽略。
[0087]
第3步:其它常规处理,比如解析包尾的校验字段等。
[0088]
进而使本发明在实时通信应用中具有实用价值,减小网络流量,实现在不损失信息的条件下,相对于一般的二进制编码方法,可以节省大约35%的网络带宽,同时提高了协议对各种数据范围的适应性。
[0089]
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1