[发明专利]一种支持可靠性调节的多协议冗余网络异步通信方法有效
申请号: | 202010809935.X | 申请日: | 2020-08-12 |
公开(公告)号: | CN111970092B | 公开(公告)日: | 2023-01-31 |
发明(设计)人: | 胡琪;王晓懿;张宏北;尹兆杰;马震;张悦 | 申请(专利权)人: | 北京工业大学 |
主分类号: | H04L1/16 | 分类号: | H04L1/16;H04L1/1829;H04L1/1812;H04W76/16;H04W76/19 |
代理公司: | 北京思海天达知识产权代理有限公司 11203 | 代理人: | 吴荫芳 |
地址: | 100124 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 支持 可靠性 调节 协议 冗余 网络 异步 通信 方法 | ||
1.一种支持可靠性调节的多协议冗余网络异步通信方法,其特征在于包括下面4个模块:(1)TransportBehavior通信行为管理模块;(2)TransportChannel传输通道状态管理模块;(3)TransportConnection连接模块;(4)TransportQueue发送接收队列模块;
其中:
(1)TransportBehavior通信行为管理模块,用于对消息进行收发管理;
该模块是整个异步通信方法的核心调度模块,其他模块均直接或者间接被它调用;
该模块管理了所有的网络连接,并利用这些网络连接,完成消息的发送或是消息的接收的工作,这些网络连接由TransportChannel进行维护;
该模块支持request-response通信模式和data-ack通信模式,可以被设置为发送端或者接收端;该模块所管理的每个网络连接,都以TransportBehavior所设置的request-response模式和data-ack模式进行消息收发;
(2)TransportChannel传输通道状态管理模块,用于负责管理网络连接,维护连接状态,所谓维护就是在网络连接发生断开时,重建网络连接,保持网络连接一直处于可用状态,同时避免并发调用异步发送或者异步接收产生错误;
TransportChannel利用状态机模式记录发送与接收的状态,对于发送方向,有unavailable、sending和idle三个状态;对于接收方向,有unavailable、receiving和idle三个状态;
TransportChannel管理及维护网络连接的过程如下:
建立TransportChannel时,它的发送方向与接收方向均处于unavailable状态,此时,TransportChannel开始异步建立网络连接,如果在此状态下有任何的发送或者接收操作,都是无效的,TransportChannel不会执行任何操作;
网络连接建立成功时,TransportChannel一方面通知TransportBehavior发送和接收可用,一方面将发送和接收方向转变到idle状态;TransportBehavior获知可用之后,会启动异步读操作,同时尝试进行消息发送;如果此时没有任何可以发送的内容,则会记录此时TransportChannel处于可用状态;在idle状态下TransportBehavior调用TransportChannel的发送和接收操作时,TransportChannel才会执行;
在执行异步发送、接收时,TransportChannel将发送方向的状态由idle变为sending、将接收方向的状态由idle变为receiving;当发送方向处于sending、接收方向处于receiving时,将不再响应发送、接收操作,直到发送、接收操作完成,发送方向状态由sending变为idle、接收方向状态由receiving变为idle时,才能继续响应新的发送、接收操作;
当连接发生中断时,发送或者接收方向处于什么状态,都将回归至unavailable状态,TransportChannel重新异步建立网络连接,并重复上述的过程,所述中断指异步发送、异步接收失败,或者长时间没有收到任何消息内容;
(3)TransportConnection连接模块,是对各种通信协议的连接的封装与实现,提供异步功能,TransportConnection模块通过统一的功能接口以及通信库,屏蔽了不同通信协议在连接建立、消息收发时的差异,为支持多种的通信协议提供了基础;
创建过程为:所述的TransportBehavior模块根据配置情况构造出若干个网络连接,即通过若干TransportChannel模块构建若干TransportConnection模块,其中,所述的每个网络连接的远端通信对象可以相同也可以不同;网络连接的类型可以相同也可以不同;
为了将这些网络连接统一管理起来,同时又能区分出不同的网络连接,每个网络连接对应唯一一个channel id,在构建好网络连接时,会为每个网络连接分配一个channel id;当需要通过某个网络发送消息内容时,通过channel id与网络连接的映射表,即可找到该网络连接;当通过某个网络连接收到消息时,也能通过channel id区分出是哪个网络连接发来的消息,channel id由TransportBehavior模块创建并交给TransportChannel管理;
(4)TransportQueue发送接收队列模块,即消息内容的缓存模块,用于负责缓存要发出的消息以及从远端收到的消息;
一个TransportBehavior有一个与之唯一对应的TransportQueue,TransportQueue用于为TransportBehavior重发消息、TransportBehavior可靠性检查提供数据支持;
TransportBehavior包含三个子模块:SendMessageQueue、ReceiveMessageQueue及SendCacheList,其中,SendMessageQueue存储着已经发送出去但是还没有被接收端确认收到的消息序号以及消息内容;ReceiveMessageQueue存储着从网络连接接收到的消息序号以及消息内容;SendCacheList存储着准备交给网络连接发送出去的消息包;
所述的request-response模式适用于发送端消息处理能力强,但是接收端消息处理能力弱的使用场景,具体通过request的发送频率限制从发送端发来的消息的流入速度;
data-ack模式适用于发送端消息处理能力弱,但是接收端能力强的使用场景,发送端有消息就向接收端发送;
所有的消息包都设计了一个固定长度的消息头head以及一个消息包长度值,其中,消息头用于确定消息包的类型是data、ack消息、request消息、还是response消息,消息包长度值是一个固定长度的字段;下文中,用“消息包基础信息”一词来指代这两个字段;
对于request-response模式,总共包含两种消息包:
第一种request消息包,用于接收端以设定的最小发送间隔周期向发送端发出request请求,具体包含消息包基础信息及消息序号,其中,当request消息包中带的消息序号为0,表达希望获取最新的消息序号,当request消息包中带的消息序号大于0,表达希望获取该序号对应的消息内容;
第二种response消息包,用于发送端回复接收端的request请求,具体包含消息包基础信息、消息的种类、消息序号及消息内容,其中,消息的种类包含三种,分别是data,initial和heartbeat;
request-response模式下的应答机制分为以下情况:
(1)接收端与发送端建立上连接时,接收端发出序号为0的request消息包,用于请求当前发送端的最新消息序号;发送端回复一个种类为initial,消息序号为发送端最新序号,消息内容为空的response包,用于初始化接收端的请求序号;
如果接收端发出request之后,在最小发送间隔周期没有收到发送端发来的response应答,则重发上一次发出的request消息包,直到接收到发送端的response包;
(2)接收端发送序号大于0的request消息包,且发送端有该序号对应的消息,发送端回复一个种类为data,消息序号为请求的消息序号,消息内容带有内容的response包,用于向接收端提供消息内容;接收端下一次发送request消息包时,其中的消息序号增大一位;
如果接收端没有收到发送端的response包,则重新发送request消息包,直到收到发送端的response包;
(3)接收端发送序号大于0的request消息包,但是发送端已经删除该序号对应的消息,则发送端回复一个种类为data,消息序号为请求的消息序号,消息内容为空的response包,用于表示出现故障;接收端会跳过该消息,请求下一个序号对应的消息内容;
(4)接收端发送序号大于0的request消息包,但是发送端没有产生该序号对应的消息,则发送端回复一个种类为heartbeat,消息序号为请求的消息序号,消息内容为空的response包,用于表示当前没有可发内容并维持通信连接;接收端收到该response包之后,不改变消息序号记录,下个周期发送request消息包时,还采用该消息序号;
对于data-ack模式,总共包含三种消息包:
第一种,data消息包:包含消息包基础信息、消息的序号及消息的内容;
第二种,ack或nack消息包:包含消息包基础信息,以及消息的序号;
第三种,heartbeat消息包:包含消息包基础信息,以及最新的消息序号;
data-ack模式应答机制如下:
发送端每次产生新的消息,就构建一个data消息包发送给接收端,同时,发送端会为消息启动应答计时,当接收端超过最大等待周期,仍未对消息进行应答时,发送端就会对该条消息进行重发,重发时该条消息的序号保持不变;
接收端收到data消息包之后,会对消息内容进行校验,如果消息内容正确,接收端则构建一个ack消息包发送给发送端表达确认,其中,序号为data消息对应的消息序号;接收端收到data消息包之后,如果消息内容错误,接收端则构建一个nack消息包发送给发送端让其重发消息,其中,序号为data消息对应的消息序号;
发送端收到ack消息包之后,如果消息包中携带的消息序号与之前发出的data消息包中消息序号一致,认为该消息接收成功;否则发送端重新发送data消息包;
发送端收到nack消息包之后,表示发送到接收端的内容有误,发送端通过nack消息包提供的消息序号,找到对应的消息内容,打包成data消息包重新发送;
当发送端长时间没有产生新消息时,为了维持网络连接不会中断,则利用当前最新的消息序号构建heartbeat消息包发送给接收端;接收端在收到heartbeat消息后,获取消息内的序号信息,然后构建一个ack消息包发给发送端,以此来维持网络连接不会中断。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京工业大学,未经北京工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010809935.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种4-丁基间苯二酚的制备方法
- 下一篇:一种汽车零部件生产加工用上漆装置