一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种报文处理方法及系统及装置及介质与流程

2022-04-24 21:29:33 来源:中国专利 TAG:


1.本发明涉及数据传输领域,具体地,涉及一种报文处理方法及系统及装置及介质。


背景技术:

2.osi(开放式系统互联)参考模型中,网络传输层协议分为tcp和udp。udp(用户数据包协议)提供了一种无需建立连接就可以发送数据的方法,具有发送效率高的优点,同时也具有数据易丢失的缺点。udp报文的最大长度被限定在64k,当报文长度大于64k时,需要拆分为多个数据报文分别进行发送。udp报文的发送同时受限于mtu(最大传输单元),udp报文长度大于mtu设定值时,udp报文会拆分为多个包分别进行发送。
3.当udp报文大于mtu设定值时,一种方案是udp报文交由链路层进行拆包;另一种方案是由应用程序将udp报文拆分成多个小于mtu设定值的包。
4.udp报文在链路层拆包: udp报文的最大长度为65535字节,mtu设置为1500字节。当udp报文长度大于mtu设置长度时,发送端udp报文会按照mtu设置长度拆分为多个包进行发送;同时,接收端会在mtu层会接收到多个包,最终组装成一个完整的udp报文。
5.方案缺点:udp报文拆包后,最后一个包的长度m可能远小于mtu的设定长度n,例如:m=10,n=1500,差值为1490,即可用负载n只使用了小部分,未提高利用的效率。


技术实现要素:

6.本发明目的为充分利用mtu约定的负载能力,提高发送的效率。
7.为实现上述发明目的,本发明提供了一种报文处理方法,所述方法包括:从消息队列中获得第一待发送报文;获得最大传输单元的设定值;基于所述第一待发送报文的长度和所述设定值,计算获得所述第一待发送报文需要拆包的数量m,m为大于1的整数;将所述第一待发送报文拆分为m个数据包,分别为:数据包1至数据包m,其中,数据包1至数据包m-1的长度均等于所述设定值;若所述数据包m的长度等于所述设定值,则将数据包1至数据包m发送;若所述数据包m的长度小于所述设定值,则将数据包1至数据包m-1发送,判断消息队列中的报文是否满足填充条件,若满足则从消息队列中取出报文填充至数据包m,将填充后的数据包m发送。
8.其中,本发明的原理为:首先从消息队列中获得第一待发送报文并获得最大传输单元的设定值;然后所述第一待发送报文的长度和所述设定值,计算获得所述第一待发送报文需要拆包的数量m;然后将所述第一待发送报文拆分为m个数据包,分别为:数据包1至数据包m,其中,数据包1至数据包m-1的长度均等于所述设定值;若所述数据包m的长度等于所述设定值,即刚好能够拆分完整,没有剩余的数据,则将数据包1至数据包m发送;若所述数据包m的长度小于所述设定值,传统的方式是直接将数据包m发送,但是这样没有充分利
用mtu约定的负载能力,导致资源的浪费,所述方法将数据包1至数据包m-1发送,判断消息队列中的报文是否满足填充条件,若满足则从消息队列中取出报文填充至数据包m,这样能够充分利用mtu约定的负载能力,最后将填充后的数据包m发送。
9.优选的,所述方法中判断消息队列中的报文是否满足填充条件,若满足则从消息队列中取出报文填充至数据包m,将填充后的数据包m发送,具体包括:计算步骤:基于所述数据包m的长度和所述设定值,计算所述最大传输单元的剩余传送空间的长度k;判断步骤:判断所述消息队列中是否存在长度小于或等于k的第二待发送报文;若存在,则将所述第二待发送报文填充至所述数据包m的末尾并更新所述数据包m的长度,然后返回执行所述计算步骤后执行所述判断步骤;若不存在,则将数据包m发送。
10.其中,在数据包m的长度小于所述设定值时,这时mtu还有相应的空间可以利用,这时本方法首先是计算出最大传输单元的剩余传送空间的长度k,然后判断所述消息队列中是否存在长度小于或等于k的第二待发送报文,即寻找是否还存在可以利用这个剩余传送空间的待发送报文,若则将该报文加入到数据包中,然后更新剩余传送空间的长度,然后继续寻找是否还有长度适合的待发送报文可以插入到剩余传送空间中,若有则继续插入,若没有则将最后的数据包m发送,上述迭代更新的方式最大限度的利用了剩余传送空间,尽量利用了mtu约定的负载能力。
11.优选的,所述方法中在步骤从消息队列中获得第一待发送报文之前,所述方法还包括:将待发送报文进行逻辑排序,将排序后的待发送报文写入到所述消息队列中。
12.其中,对待发送报文进行排序的目的在于对数据发送的顺序进行预处理,并在一定范围内保证接收方接收到的数据也是发送方发送的顺序。
13.其中,消息队列提供能顺序读取的功能,报文发送程序依据此可从消息队列中顺序获取待发送报文。
14.优选的,所述方法中的报文为udp报文,所述方法通过用户数据包协议发送udp报文。
15.优选的,所述数据包m的长度为p,所述最大传输单元的设定值为q,k=q-p。
16.优选的,所述方法在将所述第一待发送报文拆分为m个数据包之后还包括:为每个拆分后的数据包预定义报文头,报文头长度为n;其中,报文头的第1个字节表示报文采用的编码方式,报文头的第2个字节表示n的取值,报文头的第3-4个字节表示除报文头外报文体的数据长度,报文头的第5-n个字节用于扩展应用。
17.优选的,所述方法还包括:报文接收端接收到数据包1至数据包m后,对数据包1至数据包m的报文头进行处理,包括:解析数据包的第1个字节获得报文的编码方式;解析数据包的第2个字节获得报文头的长度,并根据报文头的长度从数据包中取出报文头;解析报文头的第3-4个字节获得报文体的长度,并根据报文体的长度从数据包中去除报文体;解析报文头的第5-n个字节获得扩展应用数据。
18.报文头的主要目的是对后续报文体的简要说明,该说明可以具有技术的含义,也
可以具有业务的含义。通过引入报文头,对报文接收端来说,可以通过解析报文头的内容为后续报文体的处理提供便利。
19.本发明还提供了一种报文处理系统,所述系统包括:第一获得单元,用于从消息队列中获得第一待发送报文;第二获得单元,用于获得最大传输单元的设定值;计算单元,用于基于所述第一待发送报文的长度和所述设定值,计算获得所述第一待发送报文需要拆包的数量m,m为大于1的整数;拆分单元,用于将所述第一待发送报文拆分为m个数据包,分别为:数据包1至数据包m,其中,数据包1至数据包m-1的长度均等于所述设定值;第一发送单元,用于若所述数据包m的长度等于所述设定值,则将数据包1至数据包m发送;填充单元,用于若所述数据包m的长度小于所述设定值,则将数据包1至数据包m-1发送,判断消息队列中的报文是否满足填充条件,若满足则从消息队列中取出报文填充至数据包m,将填充后的数据包m发送。
20.本发明还提供了一种报文处理装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述报文处理方法的步骤。
21.本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现所述报文处理方法的步骤。
22.本发明提供的一个或多个技术方案,至少具有如下技术效果或优点:本发明能够充分利用mtu约定的负载能力,提高发送的效率。
附图说明
23.此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明的一部分,并不构成对本发明实施例的限定;图1为报文处理方法的流程示意图;图2为报文头组包流程示意图;图3为报文头拆包流程示意图;图4为报文处理系统的组成示意图。
具体实施方式
24.为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在相互不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
25.在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述范围内的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
26.应当理解,本文使用的“系统”、“装置”、“单元”和/或“模组”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,
则可通过其他表达来替换所述词语。
27.如本说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其它的步骤或元素。
28.本说明书中使用了流程图用来说明根据本说明书的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
29.实施例一请参考图1,图1为报文处理方法的流程示意图,本发明实施例一提供了一种报文处理方法,所述方法包括:从消息队列中获得第一待发送报文,如消息队列中为:待发送报文1、待发送报文2、待发送报文3、.... 待发送报文n;获得最大传输单元的设定值,具体的设定值可以根据实际需要进行灵活的设定,如此处的设定值为3;基于所述第一待发送报文的长度和所述设定值,计算获得所述第一待发送报文需要拆包的数量m,m为大于1的整数,此时第一待发送报文为待发送报文1,待发送报文1的长度为10;将所述第一待发送报文拆分为m个数据包,分别为:数据包1至数据包m,其中,数据包1至数据包m-1的长度均等于所述设定值,此时为数据1至数据包3;若所述数据包m的长度等于所述设定值,则将数据包1至数据包m发送;若所述数据包m的长度小于所述设定值,则将数据包1至数据包m-1发送,判断消息队列中的报文是否满足填充条件,若满足则从消息队列中取出报文填充至数据包m,将填充后的数据包m发送。
30.此时数据包拆分为4个数据包,分别为数据包1至数据包4,其中数据包4的长度为1小于设定值3,则可以从消息队列中取出报文填充至数据包4,将填充后的数据包4发送。
31.下面分别从拆包和组包两个方面对本发明的实时方式进行详细介绍:步骤1:待发送报文进行逻辑排序。待发送的多条报文一般具有逻辑的顺序,其逻辑顺序可能是时间先后,也可能是自增序号先后,或者其他情况。对待发送报文进行排序的目的在于对数据发送的顺序进行预处理,并在一定范围内保证接收方接收到的数据也是发送方发送的顺序。
32.步骤2:根据步骤1排序后的待发送报文,写入到消息队列中。消息队列提供能顺序读取的功能,报文发送程序依据此可从消息队列中顺序获取待发送报文。
33.步骤3:报文发送程序从队列中取出首条待发送报文。
34.步骤3.1:获取mtu设定值。
35.步骤3.2:根据待发送报文长度和mtu设定值,计算需拆分包的数量,并拆分为多个数据包。其中拆分包的数量的计算方式可以为:假设udp报文长度为4096字节,mtu设定值为1500。拆包数量等于4096/1500=2.73取整得到2,当余数不为0时,结果加1,即拆分的包数量
为3。
36.步骤3.3:判断拆分后最后一个数据包的长度,如果等于mtu设定值的长度,将所有拆分后的包通过步骤4进行发送;如果小于mtu设定值的长度,跳转步骤5。
37.步骤4:通过udp发送多个拆分后的包。
38.步骤5:当步骤3.3拆分后的最后一个数据包长度小于mtu设定值时,从待发送队列中筛选下一个待发送报文,填充至该包的末尾,并跳转步骤4进行发送。
39.筛选填充逻辑:步骤3.3拆分后最后一个数据包长度假定为p,mtu的设定值为q。可用的空间长度k=q-p。从待发送队列中筛选出报文长度l≤k的报文,当存在l≤k的报文时,选取第1条报文填充至该包的末尾,同时重新计算p的值p(新的值)=p(老的值) l,q=k-p(新的值),重复从队列筛选的步骤;当不存在l≤k的报文时,最后一个数据包直接进行发送。
40.请参考图2,报文头组包方式为:待发送报文如果需要拆包,需要为每个拆分后的包预定义报文头。报文头长度为n,支持动态扩展。
41.报文头第1个字节,表示报文采用大端或者小端编码。编码约定了报文头第2个字节开始后续报文的编码处理方式。
42.报文头第2个字节,表示报文头n的具体取值,即明确标识报文头的长度有多少。
43.报文头第3-4个字节,表示除报文头外,报文体的数据长度,即报文体字节数。
44.报文头第5-n个字节,作为扩展应用。
45.请参考图3,报文头拆包方式为:报文头拆包是接收端接收到数据包后进行解析的过程。
46.解析数据包的第1个字节,判断报文采用大端或小端编码。
47.解析数据包的第2个字节,判断报文头的长度,并根据此长度从整个数据包中取出完整的报文头。
48.解析报文头的第3-4个字节,判断报文体的长度,并根据此长度从整个数据包中取出完整的报文体。
49.解析报文头的第5-n个字节,作为扩展应用。
50.报文头组包和拆包的目的为:报文头的主要目的是对后续报文体的简要说明,该说明可以具有技术的含义,也可以具有业务的含义。通过引入报文头,对报文接收端来说,可以通过解析报文头的内容为后续报文体的处理提供便利。
51.本发明中的报文头定义具有以下技术含义:1.报文在网络传输过程中,存在大端字节序(big endian)和小端字节序(little endian)两种情况。通过报文头的第1个字节,可以表示该报文后续的数据是采用大端字节序还是小端字节序。接收端接收报文后,可通过报文头的第1个字节判断字节序,具有自适应处理大端字节序报文和小端字节序报文的能力。
52.2.通过报文头第2个字节,可以获取报文头的长度。报文头支持非固定长度,具有动态扩展的能力。根据此长度,可以为后续报文头处理分配指定长度的内存空间,避免分配无效的空间。
53.3.通过报文头第3-4个字节,可以获取报文体的长度。其目的与上述第2点一致。
54.采用udp协议进行报文发送时,报文会根据mtu进行分组拆包,每个包的大小是固
定值,拆分后的最后一个数据包的实际数据长度可能小于固定长度,从而造成未有效利用包空间的情况。当涉及大数据量报文发送时,前述缺点会导致报文发送的次数增加,并随之带来时间的增加和效率的下降。示例,假设mtu值为1500,待发送报文长度为1600,待发送报文条数为10条。每条报文需要分组拆包为2个数据包,其中一个包长度为1500,另一个包长度为100,10条报文共计20个数据包,发送次数为20次。
55.通过对拆分后的最后一个数据包进行有效数据填充,充分利用包的空间,减少报文发送的次数,提升发送效率。
56.示例,假设mtu值为1500,待发送报文长度为1600,待发送报文条数为10条。通过填充手段,每个包的长度为1500,最后一个包的长度为1000,共计11个数据包,发送次数为11次。
57.udp报文采用拆包方案后,需要在发送端和接收端定义相同的报文头协议,在此基础上才能实现报文的完整性处理。报文头采用可变长度的机制,其核心在于第1字节定义编码,第2字节定义报文头长度,第3-4字节定义报文体长度,第5-n字节可作为应用的扩展。
58.实施例二请参考图4,图4为报文处理系统的组成示意图,本发明实施例二提供了一种报文处理系统,所述系统包括:第一获得单元,用于从消息队列中获得第一待发送报文;第二获得单元,用于获得最大传输单元的设定值;计算单元,用于基于所述第一待发送报文的长度和所述设定值,计算获得所述第一待发送报文需要拆包的数量m,m为大于1的整数;拆分单元,用于将所述第一待发送报文拆分为m个数据包,分别为:数据包1至数据包m,其中,数据包1至数据包m-1的长度均等于所述设定值;第一发送单元,用于若所述数据包m的长度等于所述设定值,则将数据包1至数据包m发送;填充单元,用于若所述数据包m的长度小于所述设定值,则将数据包1至数据包m-1发送,判断消息队列中的报文是否满足填充条件,若满足则从消息队列中取出报文填充至数据包m,将填充后的数据包m发送。
59.实施例三本发明实施例三提供了一种报文处理装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述报文处理方法的步骤。
60.实施例四本发明实施例四提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述报文处理方法的步骤。
61.其中,所述处理器可以是中央处理器(cpu,central processing unit),还可以是其他通用处理器、数字信号处理器(digital signal processor)、专用集成电路(application specific integrated circuit)、现成可编程门阵列(fieldprogrammable gate array)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
62.所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的数据,实现发明中报文处理装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等。此外,存储器可以包括高速随机存取存储器、还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡,安全数字卡,闪存卡、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
63.所述报文处理装置如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序可存储于一计算机可读存介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码、对象代码形式、可执行文件或某些中间形式等。所述计算机可读取介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器、随机存储器、点载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。
64.本发明已对基本概念做了描述,显然,对于本领域技术人员来说,上述详细披露仅仅作为示例,而并不构成对本说明书的限定。虽然此处并没有明确说明,本领域技术人员可能会对本说明书进行各种修改、改进和修正。该类修改、改进和修正在本说明书中被建议,所以该类修改、改进、修正仍属于本说明书示范实施例的精神和范围。
65.同时,本说明书使用了特定词语来描述本说明书的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本说明书至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一个替代性实施例”并不一定是指同一实施例。此外,本说明书的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
66.此外,本领域技术人员可以理解,本说明书的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本说明书的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本说明书的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
67.计算机存储介质可能包含一个内含有计算机程序编码的传播数据信号,例如在基带上或作为载波的一部分。该传播信号可能有多种表现形式,包括电磁形式、光形式等,或合适的组合形式。计算机存储介质可以是除计算机可读存储介质之外的任何计算机可读介质,该介质可以通过连接至一个指令执行系统、装置或设备以实现通讯、传播或传输供使用的程序。位于计算机存储介质上的程序编码可以通过任何合适的介质进行传播,包括无线电、电缆、光纤电缆、rf、或类似介质,或任何上述介质的组合。
68.本说明书各部分操作所需的计算机程序编码可以用任意一种或多种程序语言编写,包括面向对象编程语言如java、scala、smalltalk、eiffel、jade、emerald、c 、c#、
vb.net、python等,常规程序化编程语言如c语言、visual basic、fortran 2003、perl、cobol 2002、php、abap,动态编程语言如python、ruby和groovy,或其他编程语言等。该程序编码可以完全在用户计算机上运行、或作为独立的软件包在用户计算机上运行、或部分在用户计算机上运行部分在远程计算机运行、或完全在远程计算机或服务器上运行。在后种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(lan)或广域网(wan),或连接至外部计算机(例如通过因特网),或在云计算环境中,或作为服务使用如软件即服务(saas)。
69.此外,除非权利要求中明确说明,本说明书所述处理元素和序列的顺序、数字字母的使用、或其他名称的使用,并非用于限定本说明书流程和方法的顺序。尽管上述披露中通过各种示例讨论了一些目前认为有用的发明实施例,但应当理解的是,该类细节仅起到说明的目的,附加的权利要求并不仅限于披露的实施例,相反,权利要求旨在覆盖所有符合本说明书实施例实质和范围的修正和等价组合。例如,虽然以上所描述的系统组件可以通过硬件设备实现,但是也可以只通过软件的解决方案得以实现,如在现有的服务器或移动设备上安装所描述的系统。
70.同理,应当注意的是,为了简化本说明书披露的表述,从而帮助对一个或多个发明实施例的理解,前文对本说明书实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本说明书对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
71.针对本说明书引用的每个专利、专利申请、专利申请公开物和其他材料,如文章、书籍、说明书、出版物、文档等,特此将其全部内容并入本说明书作为参考。与本说明书内容不一致或产生冲突的申请历史文件除外,对本说明书权利要求最广范围有限制的文件(当前或之后附加于本说明书中的)也除外。需要说明的是,如果本说明书附属材料中的描述、定义、和/或术语的使用与本说明书所述内容有不一致或冲突的地方,以本说明书的描述、定义和/或术语的使用为准。
72.尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
73.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献