基于事件的二进制通讯协议的交易系统及方法与流程

文档序号:28642163发布日期:2022-01-26 17:59阅读:148来源:国知局
基于事件的二进制通讯协议的交易系统及方法与流程

1.本发明属于计算机技术领域,具体涉及基于事件的二进制通讯协议的交易系统及方法。


背景技术:

2.在为金融机构的自营部门开发面向贵金属交易所的交易管理系统时,从整体的系统设计出发,会有通讯服务模块、各类业务服务模块、前置、报盘等程序模块,这些程序模块之间均会发生各类控制、业务类消息数据的高频率交换,因此设计基于事件的二进制通讯协议来高效完成模块间的消息交换。
3.不同的系统、不同的模块之间,需要进行各类消息交换,比较常见的消息格式xml、json等,此类消息格式表达能力强但是报文体积大、解析复杂,在网络带宽有限、系统之间延时要求较低、消息交换高频场景下,此类消息格式表现差强人意。


技术实现要素:

4.本发明的目的在于基于事件的二进制通讯协议的交易系统及方法,通过设计基于事件触发的二进制通讯协议,来高效完成模块、系统间的消息交换,提升系统整体吞吐量并降低延时。
5.本发明的技术方案是:
6.第一方面,本发明提供了基于事件的二进制通讯协议的交易系统,
7.用于系统各模块之间进行消息交换所需的通讯协议的架构;
8.该系统包括通讯协议的体系结构、报文格式和运作机制,通过io操作、socket套接字连接四层架构;
9.所述架构分为四层,每层对应不同的报文结构,分别为通道层、心跳加密层、报文解析层和用户层;依靠低层驱动反应器进行事件驱动,反应器为一个独立的线程,用于处理三种事件:io输入输出操作、定时器和消息;
10.所述架构用于处理控制消息和应用消息以及容错控制信息,
11.所述控制信息包括4个字节的报头、80个字节的控制头和消息正文,所述消息正文包括数据域头和数据域;
12.所述应用消息包括4个字节的报头和信息正文,所述信息正文包括80个字节的控制头和二进制数据块。
13.所述通道层用于底层驱动的通信发送和接收报文,对应的发送和接收报文为cchannelpackage,用于检查接收的报文有效性和增加该层协议信息;
14.所述心跳加密层将报文处理完以后,将报文推给其上层cfmpprotocol,cfmpprotocol检查心跳和加密,对应的报文为cfmppackage,同时将所有信息记录在cfmppackage对应的报头中;
15.所述报文解析层将报文处理完以后,将报文推送给其上层协议cftcpprotocol,
cftcpprotocol对应的报文为cftcppackage,cftcpprotocol对最终ftcp报文进行解析、有效性验证,已经提供抽取报文信息可视化后以供用户层进行使用;
16.cftcpprotocol报文解析层将报文处理完以后,将报文推送给它的上层协议cftcppackagehandler,用户层通过继承该类,获取最终的域数据来处理业务;
17.所述报文解析层为用户层的应用协议。
18.第二方面,本发明提供了基于事件的二进制通讯协议的交易系统的方法,具体包括如下步骤:
19.发送数据过程为用户层接收信息,增加ftcp报头,推送至报文解析层,报文解析层增加fmp报头后,推送至心跳加密层,经心跳加密层增加channel层报头处理后至通道层,与底层驱动的反应器进行事件驱动;接收数据过程为发送过程反向过程。
20.第三方面,本发明还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现第二方面所述方法的步骤。
21.与现有技术的有益效果是将结构化报文的序列化、反序列化操作,协议连接的心跳保活;该协议包括通讯协议的体系结构、报文格式和运作机制,规范了系统各模块之间的通讯,通过设计基于事件触发的二进制通讯协议,来高效完成模块、系统间的消息交换,提升系统整体吞吐量并降低延时。
附图说明
22.图1为本发明提供的控制信息的格式结构图;
23.图2为本发明提供的应用信息的格式结构图;
24.图3为本发明提供的接收数据过程的流程图;
25.图4为本发明提供的发送数据过程的流程图。
具体实施方式
26.下面结合实施例对本发明的具体实施方式进行描述,以便更好的理解本发明。
27.实施例
28.消息格式定义
29.系统交换的消息包括控制消息和应用消息,两类消息都包含了一个四字节的报头,表示整个消息报文的长度,在信息正文部分有一个消息控制报头,它描述消息id和消息路径等控制信息。如图1和图2所示,两类消息的区别是,在消息正文中控制消息包含了可解析的数据域头和数据域,而应用消息的消息正文包含了二进制数据块。
30.容错控制消息是平台内部的控制消息,主要包含:状态切换控制类、消息同步类、消息订阅类。
31.如图3-4所示,该系统还包括cchannelprotocol(通道层)、cfmpprotocol(心跳加密层)、cftcpprotocol(报文解析层)和cftcppackagehandler(用户层),通过io操作、socket套接字连接四层架构。
32.cchannelprotocol通道层
33.最底层的协议,负责底层的通信发送和接收报文,对应的发送和接收报文为cchannelpackage,负责检查接收的报文有效性和增加本层协议信息,
34.本层协议具体步骤如下:
35.1)ccachelist:发送缓冲区,发送的所有二进制报文都是先放到缓冲区中,ccachelist保存的是一个ccachenode的链,有很多ccachenode组成链条,每个ccachenode可以放很多个报文,一旦ccachenode放满以后重新创建一个新的ccachenode放到这个链的后面。
36.2)cchannelpackage:接收报文,通过接收socket(套接字)数据,每次读取当前头指针-当前尾指针个字符,组装成一个cchannelpackage,再往上次协议推送。
37.3)handleinput:负责接收报文,底层reactor负责检查是否有消息要接收,继承自cprotocol,cprotocol为所有协议的基类。
38.4)handleoutput:负责发送报文,,底层reactor负责检查是否有消息要接收,同样继承自cprotocol。
39.5)cchannelcontrol:协议栈容器,继承自ceventhandler,ceventhandler为所有reactor挂接的事件类的基类,提供了统一的开放接口。cchannelcontrol协议栈容器中装载了cchannelprotocol协议,为ftcp协议的最底层协议栈容器。
40.cfmpprotocol心跳加密层
41.cchannelprotocol层将报文处理完以后,将报文推给它的上层cfmpprotocol,cfmpprotocol主要负责检查心跳和加密,对应的报文为cfmppackage,该层的所有信息记录在cfmppackage对应的报头中。
42.心跳:所有的设备检查与总线之间是否还连接通过心跳检测的方式,通过该层定义的最近发送报文和接收报文时间,来决定发送心跳包,心跳报文有一个专门的标志fmpexttagkeepalive,保存在cfmppackage报文头部,收到心跳报文表示设备正常,丢弃该报文,不向上层推送,如果心跳超时断开连接
43.数据加密:在广域网中传输数据时需要加密,防止报文被人截取,通过该层将数据加密解密以后进行传送,保证数据的安全性
44.本层协议具体步骤如下:
45.1)pop:接收到从cchannelprotocol上来的报文以后,检查是否为心跳报文,如果是则扔掉,不是则向上层推送报文
46.2)push:发送报文,检查是否要加密,如果要加密,则将数据加密后再推给cchannelprotocol去处理。
47.3)ontimer:控制心跳发送,如果当前时间

最近发送时间大于设置的时间则向外发送一个心跳报文,检查之间的连接是否正常;如果当前时间

最新读取时间大于设置的时间则认为之间的连接已经断开。
48.cftcpprotocol报文解析层
49.cfmpprotocol层将报文处理完以后,将报文推送给它的上层协议cftcpprotocol,cftcpprotocol对应的报文为cftcppackage,cftcpprotocol主要负责对最终ftcp报文进行解析、有效性验证,已经提供抽取报文的一系列工具以供用户层进行使用,这一层也称为报文解析层。
50.报文解析:从低层一直推送上来的报文,进行验证长度、域的正确性,保证数据正确性。
51.报文抽取:通过设计模式中的iterator,对多个域进行数据获取。
52.本层协议关键实现:
53.1)cftcppackage:由cfmpprotocol推上来的报文,由cftcppackage处理,该类主要提供报文有效性检查,包括长度和域的有效性;提供增加域的方法addfield和抽取域的方法getxxxxfield;提供调试报文的方法等。
54.2)tftcpheader:ftcp报头,保存在cftcppackage中,主要标示标识该消息在持久流中的编号、标示上层协议的协议id、ftcp报的tid、ftcp数据报的连续标志、ftcp报的序号、数据域个数和数据域长度。
55.3)cftcpcontrol:协议栈容器,继承自cchannelcontrol,容纳了前3层协议,cchannelprotocol为最底层,cfmpprotocol为第二层,cftcpprotocol为第三层,所有的用户层需要继承该协议栈来封装自己的协议栈。
56.cftcppackagehandler用户层
57.cftcpprotocol报文解析层将报文处理完以后,将报文推送给它的上层协议cftcppackagehandler,该层协议是用户层的应用协议,用户通过继承该类,获取最终的域数据来处理自己的业务,操作的仍然是ftcp层的报文。这一层为用户实现层
58.本层协议关键实现:
59.1)demux:封装了用户需要处理的接口handlepackage,所有从底层上来的数据报文都是通过该接口使用。
60.2)sendpackage,preparepackage:提供发送报文的接口。
61.底层驱动:该协议依靠低层驱动reactor(反应器)进行事件驱动,reactor是一个独立的线程,相当于cpu(中央处理器)中的时间片,它处理三种事件:io(输入输出)操作、定时器和消息,io操作:该四层协议结构为io操作,socket(套接字)连接;定时器:定时处理事件,在指定的时间间隔内执行某些操作;消息:处理消息事件。
62.关键实现:
63.1)ceventhandler:为事件handler,所有reactor处理的都是事件,都是从该类继承,该类提供接口handleinput为io输入操作、handleoutput为io输出操作、ontimer为定时器、sendmsg和handlemessage为消息处理;
64.2)creactor:为reactor封装类,提供了事件注册方法:registerio和removeio为注册io和取消io事件、registertimer和removetimer为注册定时器和取消定时器、sendmsg和dispatchmsg为消息发送和处理分发。该类为一个线程,提供了循环处理io操作、定时器和消息。
65.以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1