基于多通信介质扩展发布订阅系统传输协议的方法与流程

文档序号:17429600发布日期:2019-04-17 03:19阅读:298来源:国知局
基于多通信介质扩展发布订阅系统传输协议的方法与流程

本发明涉及传输框架扩展技术领域,具体地,涉及一种基于多通信介质扩展发布订阅系统传输协议的方法。



背景技术:

以数据为中心的分布式数据分发系统被广泛的应用到需要长时间持续运行大量突发数据,同时满足各通信节点即插即用的诸多领域,例如航天系统、军事信息系统、数字化战场中枢系统等。随着分布式系统对网络复杂性、实时性、信息传输安全性要求的提高,opendds(opendatadistributionservice,开放式实时数据分发服务)已支持的tcp(transmissioncontrolprotocol,传输控制协议)、udp(userdatagramprotocol,用户数据报协议)传输协议中时延的不确定不能满足强实时系统的要求,导致研制能够集成全数字外模型、周期半物理模型、连续半物理外模型、实物设备外模型等复杂强实时系统的难度也不断增大。

目前,能够满足强实时系统低时延、高带宽、确定时延的传输介质有反射内存卡、pci板卡、rapidio板卡等。以反射内存卡为例,允许同一时刻系统中所有节点读写共享内存,无需考虑通信协议,直接实现物理连接实时传输网络中的共享数据,对于复杂实时网络系统中各个节点通过反射没存卡写数据,极短时间(几百纳秒)后可更新至系统中全部其余节点。反射内存卡具有确定传输、时延小、良好错误检测和恢复机制、大数据包传输,节点信息备份的特点正好满足复杂网络的分布式通信系统的要求。扩展opendds数据传输部分协议为反射内存卡模式,既能够利用opendds提供的发布订阅功能又能利用反射内存卡数据传输的特点,保证了强实时系统对数据传输的要求。

对于某些特殊应用场景,opendds目前支持的tcp、udp、共享内存、rtps_udp可能并不能满足应用需求,需要开发定制的传输协议或者扩展已有的传输协议如can总线、cpci总线、vme总线等。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种基于多通信介质扩展发布订阅系统传输协议的方法。

第一方面,本发明提供一种基于多通信介质扩展发布订阅系统传输协议的方法,包括:

步骤1:在opendds所支持的开源udp动态库udptransport类中,初始化反射内存卡,并清空数据区;

步骤2:在所述数据区设置写标志位和读标志位;其中,写标志置位时表示发布端已将数据写入对应地址;读标志置位时表示订阅端已从对应地址将数据取走;

步骤3:在开源udp动态库源代码类udpdatalink的发布端,或者订阅端连接的函数中绑定套接字和端口之后,以及在建立发布端、订阅端建立连接之前,创建监控反射内存卡中是否有数据写入的线程函数;

步骤4:将需要通过开源udp发送的数组中的数据取出并写入反射内存卡,将表示发布端已将数据写入对应地址的标志位置位;

步骤5:保留步骤4中建立发布端,或者订阅端连接的函数发送的第一帧控制报文部分,将阻塞等待订阅端回复握手帧的函数去除,且通过反射内存卡写入指定地址,并将表示发布端已将数据写入对应地址的标志位置位,将传输类中订阅端通过套接字发送的对发布端发送的第一帧控制报文回复的过程去除;

步骤6:当用于监控反射内存卡中是否有数据写入的线程函数,监控到rfm(reflectivememory,反射内存)有数据写入后,调用套接字向127.0.0.1发送1个字节数据,以触发监视网卡数据到来的反应器;

步骤7:在开源udp动态库中的订阅端类udpreceivestrategy接收数据函数里调用rfm的应用程序接口函数,以从反射内存卡对应位置处读取发布端写入的数据,并存入源代码中的数组中。

可选地,所述步骤4包括:

将opendds源代码中,原本需要通过udp发送的数组中的数据按照预设的数据排列规则拼装成一块连续的内存数据后,再写入反射内存卡对应内存地址。

可选地,所述步骤5中,发布端发送一帧控制报文给订阅端,以建立与订阅端之间的连接之后,再向所述订阅端发送数据帧。

可选地,所述步骤6包括:

订阅端通过预先创建线程函数给自身发送1字节的通知数据,以触发订阅端的自适应通信环境自适配通信环境中的反应器;其中,所述线程函数用于监控反射内存卡中是否有数据写入;

通过反应器调用事件处理函数,控制由订阅端接收函数从反射内存卡读取数据。

可选地,所述步骤7中,类udpreceivestrategy接收函数中通过套接字接收数据过程保留,以接收监控反射内存卡中是否有数据写入的线程函数发给自己的握手帧。

与现有技术相比,本发明具有如下的有益效果:

本发明的基于多通信介质扩展发布订阅系统传输协议的方法,通过截断udp数据流,桥接至反射内存卡,创建监控反射内存卡中是否有数据写入的线程函数,无需开发自适配通信环境层监控反射内存卡中数据是否到来的前提下,利用opendds原本支持的监控网卡中数据到来与否的机制,间接实现监控反射内存卡中数据是否到来。从而实现在保证应用程序调用原有udp动态库完成发布订阅过程的基础上,且不新增特定传输介质的动态库、不修改自适配通信环境层中监控硬件数据到来的反应器机制内容的前提下,大大加快了基于特定传输介质扩展opendds中数据收发扩展传输协议这一过程,满足强实时系统对高带宽、低时延的要求。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明提供的基于多通信介质扩展发布订阅系统传输协议的方法的流程示意图;

图2为本发明的基于反射内存卡完成数据发布订阅的通信流程图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

图1为本发明提供的基于多通信介质扩展发布订阅系统传输协议的方法的流程示意图,如图1所示,包括如下步骤:

s1:在opendds所支持的开源udp动态库udptransport(用于应用程建立连接)类中初始化反射内存卡,清空数据区;

s2:为控制读写顺序设置两个标志位:写标志置位时表示发布端已将数据写入对应地址、读标志置位时表示订阅端已将数据从对应地址取走,从而完成线程同步,避免丢帧;

s3:在udp动态库源代码类udpdatalink(用于协议层建立连接)的建立发布端/订阅端连接的函数里,绑定套接字和端口之后,建立发布端、订阅端建立连接之前,创建监控反射内存卡中是否有数据写入的线程函数;

s4:将原本通过udp发送的数组中的数据取出并写入反射内存卡,将表示发布端已将数据写入对应地址的标志位置位;

s5:保留s4中建立发布端/订阅端连接的函数发送的第一帧控制报文部分,将阻塞等待订阅端回复“握手帧”的函数去掉,且通过反射内存卡写入指定地址,并将表示发布端已将数据写入对应地址的标志位置位,将传输类中订阅端通过套接字发送的对发布端发送的第一帧控制报文回复的过程去掉;

s6:监控反射内存卡中是否有数据写入的线程函数监控到rfm有数据写入后,调用套接字向127.0.0.1发送1个字节数据(标识可从反射内存卡读取数据的标志)触发监视网卡数据到来的反应器,起“门铃”作用;

s7:在动态库中订阅端类udpreceivestrategy(接收数据类)接收数据函数里调用rfm的应用程序接口函数从反射内存卡对应位置处读取发布端写入的数据,并存入源代码中的数组中。

基于udp动态库扩展传输协议的方法能够得以实现,主要是因为用于发布端、订阅端收发数据之前建立连接的“握手帧”重定向到反射内存卡传输,以及接收数据时监控rfm读写操作线程函数的“门铃”作用。基于udp时,发布端通过套接字将“握手帧”发送给订阅端已建立连接。基于rfm时,发布端将“握手帧”写入反射内存卡指定地址并置位写标志。订阅端的监控rfm线程函数查询到该标志位,回复给发布端一帧数据以建立连接。订阅端监控rfm读写操作线程函数监控到rfm有数据写完成时通过套接字向本机发送rfm可读的1字节数据,反应器监视到事先注册在其中的套接字有数据到来,进而能够执行到事先注册在反应器中事件处理函数接收数据。而此时,在接收数据函数内部从反射内存卡对应地址读出发布端写入的数据。至此,基于udp的扩展传输协议,发布端向rfm写数据,订阅端从rfm读数据的整个流程得以实现。

图2为本发明的基于反射内存卡完成数据发布订阅的通信流程图,结合图1、图2所示,做详细说明。发布端/订阅端完成传输数据的全流程,包括关键的“握手帧”的处理;订阅端通过在操作系统事件多路分离接口上进行侦听,网卡上有数据到来时触发自适配通信环境中反应器,并发出对预登记事件处理器对象中的方法的“回调”,对于开发者针对特定应用场景,开发自己的回调函数。

当发布端将数据写入反射内存卡后,监控反射内存卡中是否有数据写入的线程函数会通知订阅端数据到来;订阅端利用自适配通信环境中反应器已经支持监控网卡数据,通过套接字向自己发送1个字节通知数据(标识可从反射内存卡读取数据的标志),此时两台计算机之间并无因传输数据而产生的udp报文;订阅端监控到网卡中有数据到来,这些数据是订阅端发给自己的1字节的通知数据,而非发布端发出的用户数据;订阅端通过反射内存卡读取用户数据后再赋给原udp动态库中使用的数组,以便后续的解析。

本发明的核心步骤是传输过程需要初始化反射内存卡,将发布端、订阅端收发数据之前建立连接的“握手帧”重定向到反射内存卡传输,以及接收数据时监控rfm读写操作线程函数的“门铃”作用。

本发明的方法核心步骤如下:

第一包数据控制帧的处理:

(1)订阅端创建监控反射内存卡中是否有数据写入的线程函数,监控到反射内存卡写入数据后,利用套接字向本机发送数据到达的通知,即“按门铃”告知订阅端网卡中有数据到来;

(2)发布端首先依据读标志被置位后,决定向订阅端通过反射内存卡发送用于建立连接的“握手帧”,首先复位读标志,置位写标志,同时阻塞等待来自订阅端的接收到发布端发来的控制帧的回复以建立连接,保证opendds传输面向连接、可靠传输的要求。利用修改源程序将此处的阻塞等待去掉,让程序未得到订阅端的反馈也能顺利执行;

(3)订阅端通过步骤(1)中创建的线程函数监控到反射内存卡中有数据写入后,通过套接字向本机发送1字节的通知数据,并复位写标志;

(4)订阅端源程序中udpreceivestrategy通过套接字接收数据函数被自适配通信环境中监测到网卡中有数据到来后调用,从利用反射内存卡提供的应用程序接口函数读取数据,置位读标志,并由原程序中解析数据部分完成解析,无需自己开发。

后续发布端向订阅端发布应用层数据的处理:

(1)订阅端创建监控反射内存卡中是否有数据写入的线程函数,监控到反射内存卡写入数据后,利用套接字向本机发送数据到达的通知,即“按门铃”告知订阅端网卡中有数据到来;

(2)发布端首先依据读标志被置位后,决定向订阅端通过反射内存卡发送用户数据,首先复位读标志,置位写标志;

(3)订阅端通过步骤(1)中创建的监控反射内存卡中是否有数据写入的线程函数监控到反射内存卡中有数据写入后,通过套接字向本机发送1字节的通知数据,并复位写标志;

(4)订阅端源程序中udpreceivestrategy通过套接字接收数据的函数被自适配通信环境中监测到网卡中有数据到来后调用,从利用反射内存卡应用程序接口函数读取数据,置位读标志,并将读取的数据存入源代码中的数组中,并由原程序中解析数据部分完成解析,无需自己开发。

本发明的方法,无需开发监控特定传输介质数据到来与否,直接利用opendds已支持的监控网卡数据到来与否的功能,通过在订阅端创建监控特定传输介质中是否有数据写入的线程函数,当数据被成功写入特定介质后,线程函数利用套接字向本机发送1字节的通知数据,以便订阅端从特定介质的指定内存地址读取数据,间接完成监控基于特定传输介质的数据传输,进而完成基于多通信介质扩展发布订阅系统数据传输协议的功能,实现本专利提出的方法。对于其他传输介质可利用同样的开发思想、步骤完成对opendds传输协议的快速扩展。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

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