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

实现一次特性的消息传输方法与流程

2021-12-17 21:03:00 来源:中国专利 TAG:


1.本发明涉及网络传输的技术领域,具体地,涉及实现一次特性的消息传输方法。


背景技术:

2.由于传输介质、传输过程中软硬件问题,网络传输的过程通常被认为是不确定的。为了应对这类问题带来的影响,硬件及软件的不同层级的协议都需要采用多种方式处理收到的数据包或数据流,如传输控制协议(transmission control protocol,简称tcp协议)就采用了类似滑动窗口自动重传等技术处理以处理网络传输中可能出现的丢包以及乱序的现象。
3.但在协议采取了相关措施后,应用层仍然无法假设自己运行在一个理想的网络环境中,在极端情况下,因为应用层或者协议层的重发机制,同一个数据包可以被远端收到多次,而这可能引发一些业务逻辑中的错误,比如一个扣费的数据包被重发多次后造成的重复扣费。
4.在公开号为cn106789427a的专利文献中公开了一种网络传输量计算方法,包含四个步骤,第一步,通过调整发送速率来调整丢包率,第二步,构建网络带宽的估算模型,第三步,对传输的帧率进行调整,对网络传输的数据包进行采样,第四步,在传输的过程中,进行纠错。
5.上层应用可以调整相关业务,将其实现为幂等业务,以避免该类问题。但该调整在某些情况下可能需要较大的工作量,或者在业务逻辑上难以实现。因此,需要提出一种技术方案以改善上述技术问题。


技术实现要素:

6.针对现有技术中的缺陷,本发明的目的是提供一种实现一次特性的消息传输方法。
7.根据本发明提供的一种实现一次特性的消息传输方法,所述方法包括发送消息和接收回复两个阶段,所述发送消息阶段包括消息发送端和消息接收端,所述发送消息阶段中的消息发送端包括如下步骤:
8.步骤s1:上层传入待发送的消息;
9.步骤s2:读取版本号;
10.步骤s3:存储待发送的消息内容;
11.步骤s4:将存储的消息内容与版本号打包一起发送至消息接收端;并设置超时计数器。
12.优选地,所述步骤s2包括如下步骤:
13.步骤s2.1:若版本号为奇数,则直接跳转至步骤s3;
14.步骤s2.2:若版本号为偶数,则将版本号递增1并保存版本号。
15.优选地,所述打包指使用方法使版本号与消息内容进行绑定。
16.优选地,所述消息发送消息阶段中的消息接收端包括如下步骤:
17.步骤1:如果在超时计数器超时后还没有接收到消息接收端的回复,则再次发起发送消息阶段;
18.步骤2:如果在超时计数器超时前接收消息,则检查消息中的版本号,根据消息中版本号的值与接收端版本号的值进行对应的逻辑。
19.优选地,所述步骤2包括如下步骤:
20.步骤2.1:若版本号与消息接收端的版本号之差小于0,说明上次只在阶段二出错,忽略本消息并返回成功;
21.步骤2.2:若消息的版本号比接收端的版本号大1,则说明发送端发送了一个新的消息,此时接收端根据消息执行相关业务,将接收端的版本号递增1并保存,保存接收到的消息内容与该业务的执行结果,并向消息发送端返回成功;
22.步骤2.3:若消息的版本号与接收端的版本号相等,说明发送端重复了一次发送消息步骤;检查消息内容与接收端之前保存的消息内容是否一致,若不一致,说明两端状态产生了预期外的问题,报错并结束;否则,则向消息发送端返回成功。
23.优选地,所述接收回复阶段包括消息发送端和消息接收端,所述接收回复阶段的消息发送端包括如下步骤:
24.步骤a:读取版本号,若版本号为偶数,说明未执行过发送消息阶段,报错并退出;
25.步骤b:将该版本号发送至消息接收端,设置超时计数器。
26.优选地,所述消息发送端还包括如下步骤:
27.步骤一:如果在超时计数器超时后还没有接收到消息接收端的回复,则再次发起接收回复阶段;
28.步骤二:如果在超时计数器超时前接收到消息接收端的回复,则比较消息接收端的内容的版本号与自身的版本号;
29.步骤三:若回复中的版本号比消息接收端的版本号大1,说明该回复内容对应了之前的发送消息请求,回复内容中的业务相关内容即为一次完整消息传输的回复;
30.步骤四:其他情况下,报错;
31.步骤五:将消息发送端的版本号递增1并保存;
32.步骤六:向上层返回接受到的数据中的业务内容。
33.优选地,所述接收回复阶段的消息接收端包括如下步骤:
34.步骤a:接收消息,并检查消息中的版本号,根据消息中版本号的值与接收端版本号的值进行对应的逻辑;
35.步骤b:若版本号与消息接收端的版本号相等,则说明该条接收回复请求对应了上一次发送消息请求;此时将消息接收端的版本号加1并保存,并将增加后的版本号与发送消息阶段中保存的业务执行输出的结果打包发回至消息发送端;
36.步骤c:若消息的版本号比接收端的版本号小1,则说明消息发送端曾经发出过接收回复请求,但未正确地处理消息接收端对该请求的返回内容,重新发送了接受回复的请求;此时,将当前消息接收端的版本号与发送消息阶段中保存的业务执行输出的结果打包发回至消息发送端;
37.步骤d:其他情况,报错并返回。
38.优选地,所述方法向用户提供恰好一次的消息传输抽象;恰好一次是一个消息服务的特性,表示系统保证每条消息有且仅会发送并生效一次。
39.优选地,所述方法在消息的发送端和接收端同时维护一个版本号。与现有技术相比,本发明具有如下的有益效果:
40.本发明可以在协议层保证“恰好一次”特性,因此在构建在本方法之上的应用或业务逻辑不需要考虑信息传输过程中可能出现的丢包或者重复发送问题。
附图说明
41.通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
42.图1为本发明的流程原理图。
具体实施方式
43.下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
44.本发明提供了一种实现一次特性的消息传输方法,可以向方案使用者提供恰好一次的消息传输抽象。恰好一次exactly once是一个消息服务的特性,其表示系统保证每条消息有且仅会发送并生效一次。
45.为实现该特性,方案在消息的发送端和接收端同时维护一个版本号。该方案要求版本号的更改拥有持久性且不可回退,即在修改版本号后,读出的版本号将一直为写入的值,直到下一次修改版本号。初始状态下,消息的发送端与消息的接收端的版本号均为0。
46.本发明将一次消息发送划分为两个阶段:分别为发送消息和接收回复。
47.在发送消息阶段,消息发送端执行如下步骤:
48.步骤s1:上层传入待发送的消息。消息发送实体收到传入的消息后,消息传输便开始了。
49.步骤s2:读取版本号,版本号保存在存储器中,直接读取;步骤s2.1:若版本号为奇数,则直接跳转至步骤s3;步骤s2.2:若版本号为偶数,则将版本号递增1并保存,本实施例中存储器可以为flash。
50.步骤s3:存储待发送的消息内容,覆盖存储到存储设备中;步骤s4:将存储的消息内容与版本号打包一起发送至消息接收端;并设置超时计数器,在设备端的某个实体中设置,本实施例中存储设备可以为flash;实体可以为进程或者线程。
51.打包通常指使用一些方法保证版本号与消息内容的绑定,如使用非对称秘钥算法对整个数据包进行签名,但具体的打包方式不在本方案的定义范围内。
52.消息接收端执行如下步骤:
53.步骤1:如果在超时计数器超时后还没有接收到消息接收端的回复,那么再次发起发送消息阶段。
54.步骤2:如果在超时计数器超时前接收消息,那么检查消息中的版本号,根据消息
中版本号的值与接收端版本号的值进行对应的逻辑;步骤2.1:若版本号与消息接收端的版本号之差小于0,说明上次只在阶段二出错,忽略本消息并返回成功,使设备端继续阶段二;步骤2.2:若消息的版本号比接收端的版本号大1,则说明发送端发送了一个新的消息,此时接收端可以根据消息执行相关业务,将接收端的版本号递增1,然后保存接收到的消息内容与该业务的执行结果,并向消息发送端返回成功;步骤2.3:若消息的版本号与接收端的版本号相等,说明发送端重复了一次发送消息步骤。此时,检查消息内容与接收端之前保存的消息内容是否一致,若不一致,说明两端状态产生了预期外的问题,报错并结束;否则,则向消息发送端返回成功。
55.在接收回复阶段,消息发送端执行如下步骤:
56.步骤a:读取版本号,若版本号为偶数,说明未执行过发送消息阶段,报错并退出;步骤b:将该版本号发送至消息接收端,然后设置一个超时计数器。
57.消息接收端执行如下步骤:
58.步骤a:接收消息,并检查消息中的版本号,根据消息中版本号的值与接收端版本号的值进行对应的逻辑;步骤b:若版本号与消息接收端的版本号相等,则说明该条接收回复请求对应了上一次发送消息请求。此时将消息接收端的版本号加1并保存,并将增加后的版本号与发送消息阶段中保存的业务执行输出的结果打包发回至消息发送端;步骤c:若消息的版本号比接收端的版本号小1,则说明消息发送端曾经发出过接收回复请求,但未正确地处理消息接收端对该请求的返回内容,因此重新发送了接受回复的请求。此时,将当前消息接收端的版本号与发送消息阶段中保存的业务执行输出的结果打包发回至消息发送端;步骤d:其他情况,报错并返回。
59.消息发送端执行如下步骤:
60.步骤一:如果在超时计数器超时后还没有接收到消息接收端的回复,那么再次发起接收回复阶段;步骤二:如果在超时计数器超时前接收到消息接收端的回复,那么比较消息接收端的内容的版本号与自身的版本号;步骤三:若回复中的版本号比消息接收端的版本号大1,说明该回复内容对应了之前的发送消息请求,那么该回复内容中的业务相关内容即为一次完整消息传输的回复;步骤四:其他情况下,报错;步骤五:将消息发送端的版本号递增1;步骤六:向上层返回接受到的数据中的业务内容。
61.本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
62.以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本技术的实施例和实施例中的特征可以任意相互组合。
再多了解一些

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

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

相关文献