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

交易所API模块及相关的交易所应用平台的制作方法

2022-09-03 20:09:49 来源:中国专利 TAG:

交易所api模块及相关的交易所应用平台
技术领域
1.本技术涉及api领域,特别是涉及一种基于java版高性能通讯协议的交易所api模块,以及使用该api模块的交易所应用平台。


背景技术:

2.随着互联网金融的发展,越来越多的应用平台根据业务需求的发展,都要求能够同时接入不同的证券交易所(上海证券交易所和深圳证券交易所)来进行金融相关业务。
3.但在上海证券交易所和深圳证券交易所这两个交易所并不直接提供接入的官方api库的情况下,各企业只能依靠自行研发的接入api库来接入这些证券交易所的数据。但是,由于上海证券交易所和深圳证券交易所这两个所的不同交易平台分别使用不同的通信协议来实现各种平台业务,因此,在接入不同交易所的各个平台时,就需要从多个接入api库中去调用对应的api,才能实现数据平台的接入。
4.在表1a和1b中,分别示出了上海证券交易所和深圳证券交易所的各平台所使用的通讯协议。
5.平台名称协议类型债券平台binary协议固收平台step协议行情平台binary协议
6.表1a上海证券交易所各平台的通讯协议
7.平台名称协议类型现货集中竞价交易平台binary协议非交易处理平台binary协议固定收益交易平台binary协议行情平台binary协议
8.表1b深圳证券交易所各平台的通讯协议
9.除了交易所不同平台之间的协议冲突问题之外,所述自研的应用平台还面临着其他接入问题,例如:
10.a.应用层在处理业务代码的同时,还需要去处理跟交易所之间的协议转换,与服务器的重连以及心跳等。
11.b.后续随着接入的平台更多,需要支持的业务品种也就更多,这会导致应用层的代码耦合性越来越高,不利于程序后续的扩展和性能。代码耦合性是一个软件结构内不同模块之间互连程度的度量,耦合性也叫块间联系。模块之间联系越紧密,其耦合性就越强
12.c.代码耦合性变高以后,模块的独立性就越差,这就导致每次修改的成本和测试验证的成本大大增加。
13.因此,希望能够开发一种交易所api模块和相应的交易所应用平台,以解决上述这些问题。


技术实现要素:

14.本技术涉及交易所api库,其能够同时支持上海证券交易所和深圳证券交易所(如果今后还有别的交易所接入,也可扩展支持新接入的交易所)的多种数据协议,而且还能实现良好的抽象、稳定、高效的运行环境,并提供给应用层良好的编程体验。
15.根据本技术的第一方面,提供了一种用于数据协议转换的交易所api模块,包括:
16.存储有交易所api库的数据库;
17.编码器,被配置为使用所述交易所api库以基于netty执行java对象到bytebuf的转换,从而将来自客户端的数据转换为外部交易所各平台所支持的协议数据;以及
18.解码器,被配置为使用所述api库以基于netty执行bytebuf到java对象的转换,从而将来自外部交易所各平台所支持的协议数据转换成交易所应用平台的接口可用的数据类型。
19.根据本技术的第二方面,提供了一种交易所应用平台,包括:
20.客户端接入前置,被配置为对接收到的来自客户端的业务请求进行解析以识别出所述业务请求的业务类型,并根据所识别出的业务类型将所述业务请求转发至交易平台或行情平台中的相应一个,其中所述业务请求的业务类型包括交易请求和行情请求;
21.如权利要求1所述的交易所api模块;
22.交易平台,被配置为对所述业务请求中的交易数据的格式进行识别,调用所述交易所api模块中的交易所api库中的相应api对所述交易数据进行协议转换,并将经协议转换后的交易数据发送给外部交易所的相应平台;以及
23.行情平台,被配置为根据来自所述客户端的业务请求订阅相应的行情,并在从所述外部交易所接收到相应的行情数据之后,通过调用所述交易所api模块中的交易所api库中的相应api对所述行情数据进行协议转换,并将经协议转换后的标准行情数据转发给发起所述业务请求的客户端。
24.提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
附图说明
25.为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:
26.图1示出了根据本技术的一个实施例的交易所应用平台的应用架构示意图。
具体实施方式
27.如上所述,现有自研的交易所应用平台可能存在如下缺陷:
28.1)应用层需要自己去实现重连和心跳机制,比如:
29.应用层需要去实现跟服务器发送断线时的重连机制;
30.应用层需要去实现跟服务器端的心跳机制。
31.2)对于从不同的交易所接入的不同平台的数据,使用的是不同的数据协议,比如,上海证券交易所的(binary、step)协议和深圳证券交易所的(binary)协议。交易所每个平台之前的重连以及心跳机制等都需要自研的交易所应用平台的应用层去继承。
32.为了消除上述交易所应用平台中存在的这些缺陷,本技术开发了一种交易所api模块,所述api模块包括有java版高性能通讯协议的api库,以及使用所述api模块的交易所应用平台。所述api模块支持上海证券交易所交易和行情binary协议、深圳证券交易所交易和行情binary协议及上海证券交易所的固收平台的step协议,同时,提供了自动重连支持、心跳机制支持、少copy提高性能等特性。
33.a.本技术在设计api库时,通过对api库良好的抽象设计,使得其同时支持上海证券交易所交易网关和行情网关的binary协议、上海证券交易所固收平台的step协议,深圳证券交易所交易网关和行情网关的binary协议,从而实现了多协议支持。
34.具体而言,所述java版高性能通讯协议api库具有下述特点:
35.》api库从接口接收需要发送给上海证券交易所债券平台的数据,通过api库的encoder(编码器)将数据转换为binary协议数据,发送给债券平台。api库同时接收债券平台给的反馈binary协议数据,再通过api库的decoder(解码器)将binary协议数据转换为交易所应用平台的接口可以使用的数据类型。
36.》api库从接口接收需要发送给上海证券交易所固收平台的数据,通过api库的encoder(编码器)将数据转换为step协议数据,并发送给固收平台。api库同时接收固收平台给的反馈step协议数据,再通过api库的decoder(解码器)将step协议数据转换为交易所应用平台的接口可以使用的数据类型。
37.》api库接收上海证券交易所行情平台推送的行情binary协议数据,通过api库的decoder(解码器)将数据转换为交易所应用平台的接口可以使用的数据类型。
38.》api库从接口接收需要发送给深圳证券交易所现货集中竞价交易平台的数据,通过api库的encoder(编码器)将数据转换为binary协议数据,发送给现货集中竞价交易平台。api库同时接收现货集中竞价交易平台返回的反馈binary协议数据,再通过api库的decoder(解码器)将binary协议数据转换为交易所应用平台的接口可以使用的数据类型。
39.》api库从接口接收需要发送给深圳证券交易所非交易处理平台的数据,通过api库的encoder(编码器)将数据转换为binary协议数据,并发送给非交易处理平台。api库同时接收非交易处理平台返回的反馈binary协议数据,再通过api库的decoder(解码器)将binary协议数据转换为交易所应用平台的接口可以使用的数据类型。
40.》api库从接口接收需要发送给深圳证券交易所固定收益交易平台的数据,通过api库的encoder(编码器)将数据转换为binary协议数据,并发送给固定收益交易平台。api库同时接收固定收益交易平台返回的反馈binary协议数据,再通过api库的decoder(解码器)将binary协议数据转换为交易所应用平台的接口可以使用的数据类型。
41.》api库接收深圳证券交易所行情平台推送的行情binary协议数据,通过api库的decoder(解码器)将数据转换为交易所应用平台的接口可以使用的对象数据。
42.具体支持的协议如下:
43.交易所平台名称协议类型上海证券交易所债券平台binary协议
上海证券交易所固收平台step协议上海证券交易所行情平台binary协议深圳证券交易所现货集中竞价交易平台binary协议深圳证券交易所非交易处理平台binary协议深圳证券交易所固定收益交易平台binary协议深圳证券交易所行情平台binary协议
44.b.api库可以同时保持跟多平台连接,当一个或多个平台同一时间异常断开时,api库都会发起重连机制,支持的异常场景具体如下:
45.》当接口与平台的tcp发生断开时,api库会自动发起重连。
46.》当平台给接口发出登出请求,api库会自动发起重连。
47.》当平台直接断开和接口的tcp连接时,api库会自动发起重连。
48.》当发生网络异常时,api库会自动发起重连。
49.c.心跳机制支持,api库支持通知和多个平台保持心跳机制,随时监控平台的状态,保证在长时间没有业务的情况下接口和平台依然保持正常连接,防止由于长时间无数据交互导致断开。
50.d.少copy提高性能,api库提供协议的对象,接口直接使用api库定义的对象,api库在进行协议的decode(解码器)和encode(编码器)时,通过少copy提高性能。
51.在图1中示出了根据本技术的一个实施例的交易所应用平台的应用架构示意图。
52.如图所示,所述应用架构可以分成三个层次,即客户层、应用层和交易平台层,在图中由下至上用虚线分隔开这三层。
53.其中,所述客户层包括客户端110a、客户端110b、客户端110c、
……
。也即,来自世界各地的用户可使用各种客户端(包括但不限于个人计算机、笔记本、pda、平板、智能手机等等)向交易所应用平台120发送行情或交易请求。
54.所述应用层包括交易所应用平台120。而所述交易所应用平台120则进一步由客户端接入前置122、交易平台124、行情平台126以及交易所api模块128构成。其中,所述交易所api模块128可以由加载了如前所述的交易所java版高性能通讯协议的交易所api库的数据库来实现。
55.应该理解,所述交易所应用平台12中的各个模块和组件可以由硬件、软件或其组合实现。并且所述交易所应用平台的应用架构的这些组成部分彼此可通过有线或无线网络进行数据通信。所述网络包括电缆、数据线、wifi、蜂窝网络、局域网、广域网以及互联网等等。
56.接下来,结合所述应用架构来描述下交易所应用平台的示例运行流程。
57.首先,用户通过客户端110a、110b、110c中的一个或多个来向交易所应用平台120发送其业务请求。来自世界各地的用户可使用安装在各种客户端,例如但不限于,个人计算机、笔记本、pda、平板、智能手机等等上的相应软件、应用、app、小程序、相关网站等来发起所述业务请求。而所述业务请求可以是具体的交易请求,例如买入、卖出、报价等交易请求,也可以是行情查询、订阅等行情请求。
58.交易所应用平台120主要包括客户端接入前置122、交易平台124、行情平台126以及交易所api模块128。
59.在交易所应用平台120接收到来自客户端的业务请求之后,所述请求先由客户端接入前置122进行处理。在所述客户端接入前置122处,先对所述业务请求进行解析和识别,例如对所述请求数据进行解密、识别其中的业务代码以判断其请求的业务类型(是交易请求还是行情请求),并根据识别出的业务类型将其转送至相应的交易平台124或行情平台126以进行进一步的处理。
60.如果解析的结果是交易请求(例如报价请求),则所述交易请求被转发给交易平台124。在交易平台124处,可先对所述交易请求中的交易数据的格式进行识别,随后,向交易所api模块128中存储的交易所java版高性能通讯协议的api库发送协议转换请求,以通过调用api库中的相应api对所述交易数据进行协议转换。所述协议转换包括:使用api库根据java对象数据以及java对象中bizid的值来对数据进行不同的协议转换,随后将经协议转换后的交易数据发送给各外部交易所的相应的交易平台以进行交易。
61.然后,在所述交易平台124接收到来自外部交易所的相应的交易平台返回的反馈消息和/或回报消息之后,所述交易平台124再次调用交易所api模块128中相应的api将接收到的反馈数据协议转换为指定的java对象,即通过java对象中msgtype的值将接收数据转换为交易平台124需要的java对象,再将java对象转换为标准交易反馈数据。最后,交易平台124将该标准反馈数据推送给提出业务请求的相应客户端以返回交易结果。
62.如果解析的结果是行情请求(例如行情订阅请求),则所述行情请求被转发给行情平台126以进行订阅。所述行情平台126可以是例如kafka平台。例如在行情平台126处,当行情平台126从外部的交易所接收到相应的行情数据之后,可通过调用api库中的相应api来进行协议的转换,以将接收到的行情数据转换为指定的java对象,接着,将java对象再转换为标准行情数据,推送给行情平台126。行情平台126将经转换后的标准行情数据转发给发起业务请求的客户端以显示给用户。
63.而交易层包含了多个外部交易所提供的各种平台,例如上交所债券平台(binary协议)130a、上交所固收平台(step协议)130b、深交所现货集中竞价交易平台(binary协议)130c、深交所非交易处理平台(binary协议)130d、深交所固定收益平台(binary协议)130e、上交所行情平台(binary协议)130f、深交所行情平台(binary协议)130g等等。它们根据来自所述交易所应用平台120的相应请求,处理并返回所请求的交易结果或行情数据。
64.本技术使用的api库支持同时多交易所、多协议、多平台的数据输入和输出,并实现了根据不同的java对象和类型对数据进行快速的判断和使用。
65.下面以上海证券交易所和深圳证券交易所作为外部交易所的示例来具体描述下所述api库的功能和作用。但应该理解,所述描述中涉及的交易所和其提供的平台的示例仅仅是作为示例给出,所述交易所应用平台120可以包括能够处理更多的其他交易所,例如伦敦证券交易所、纽约证券交易所,的更多协议转换的api。这只需要通过扩展所述api库,使得其容纳能实现这些交易所的数据协议转换的api即可。
66.a)当交易所应用平台120接收到输入(来自客户端的业务请求)时,如下使用api库实现协议转换:
67.首先,在使用api库时,对应数据的输入,可通过key去区分所述消息是发送给上海证券交易所还是深圳证券交易所。
68.具体支持的key如下:
69.key值交易所sse_tdgw上海证券交易所szse_tdgw深圳证券交易所
70.针对上海证券交易所:在使用api库时,对于数据的输入,先通过不同的java对象和bizid的值来区分使用不同的协议类型以及不同的申报类型,再将输入转发给上海证券交易所的相应平台。
71.具体支持的申报类型如下:
[0072][0073][0074]
针对深圳证券交易所:在使用api库时,对于数据的输入,通过不同的java对象和bizid的值来区分使用不同的协议类型以及不同的申报类型,再将输入转发给深圳证券交易所的相应平台。
[0075]
具体支持的申报类型如下:
[0076][0077]
并且,如前所述,根据业务需求,可以通过扩充各地交易所的协议类型以及申报类型,实现更多快速的扩展。
[0078]
b)在交易所应用平台120接收到输出(来自外部交易平台的交易结果或反馈数据)时,如下使用api库实现协议转换:
[0079]
在使用api库时,对应数据的输出,可通过key去区分消息是上海证券交易所还是深圳证券交易所输出的数据。
[0080]
具体支持的key如下:
[0081]
key值交易所sse_tdgw上海证券交易所szse_tdgw深圳证券交易所
[0082]
针对上海证券交易所:在使用api库时,对于数据的输出,可通过不同的java对象和msgtype的值,使用不同的协议类型以及不同的响应类型区分输出的数据来源自上海证券交易所的具体哪个交易平台,从而更方便正确使用对应数据。
[0083]
具体支持的响应类型如下:
[0084][0085][0086]
深圳证券交易所在使用api库时,对数据的输出,会通过不同的java对象和msgtype的值,使用不同的协议类型以及不同的响应类型区分输出的数据来源自深圳证券交易所的具体哪个平台,更方便正确使用对应数据。
[0087]
具体支持的响应类型如下:
[0088]
[0089]
[0090][0091]
应该理解,根据业务需求,可以进行更多快速的扩展。
[0092]
下面针对交易所java版高性能通讯协议的api库的具体实现进行介绍。
[0093]
在本技术的方案中,使用了java版本的api库,因此,使用api库的是一个java程序。在协议转换中,通过将交易所不同协议类型的数据转换为该应用程序可以快速使用的java对象,应用层(交易所应用平台)在使用api库时就能获得更好的体验,并且不需要关心bytebuf到java对象的转换。
[0094]
具体而言,所述交易所api模块128包括:存储有交易所java版高性能通讯协议的api库的数据库;编码器,被配置为使用所述api库以基于netty执行java对象到bytebuf的转换,从而将来自客户端的数据转换为外部交易所各平台所支持的协议数据;以及解码器,被配置为使用所述api库以基于netty执行bytebuf到java对象的转换,从而将来自外部交易所各平台所支持的协议数据转换成交易所应用平台的接口可用的数据类型。
[0095]
下面以binary协议和step协议来示例说明不同协议的数据如何进行协议转换:
[0096]
1.api库对于binary协议的数据使用decode(解码器)以基于netty实现bytebuf到java对象的转换。
[0097]
具体而言,decode(解码器)基于netty将使用bytebuf将数据分割为消息头、消息体、消息尾以进行解析。通过消息头中的msgtype来判断将bytebuf转换为指定的java对象。再通过bytebuf中提供的方法,比如readlong、readunsignedshort、readbytes以及其他方法,获取每个字段的值,将值赋值到java对象中相同的字段上。在以往的交易平台中,需要认真结合接口文档区分每个字段的长度,转换赋值容易发生错误。而在本技术中,在应用层中对java对象进行赋值更加方便和快捷。对于bytebuf主要是通过readerindex和writerindex两个指针进行数据的读和写,整个bytebuf被这两个指针最多分成三个部分,分别是可丢弃部分、可读部分和可写部分。通过内置的复合缓冲类型实现零拷贝提高效率。
[0098]
具体的将binary协议的数据转换为java对象的示例程序如下所示:
[0099]
[0100]
[0101][0102]
利用上述程序,可以先从binary协议的数据中读取出消息头、消息体和消息尾的信息,然后,将数据组装到java对象里面去,进而构建出相应的java对象。
[0103]
2.api库对于step协议的数据使用decode(解码器)基于netty实现bytebuf到java对象的转换。
[0104]
decode(解码器)对于step协议数据基于netty将bytebuf转换为特定的java对象,将bytebuf中消息体的部分转换为一个string字符串,结合step协议的特性,使用”0x01”来分割出字段串中的每一个键值对,将键值对通过“=”分割分别读取出键和值,再存入java对象的map中。在以往的交易平台中,对于step协议的数据,无法做到对bytebuf和java对象进行字段的一一对应,因此,需要api库进行复杂的拆分组装。而在本技术中的应用层使用java对象则更加方便和快捷。对于bytebuf主要是通过readerindex和writerindex两个指针进行数据的读和写,整个bytebuf被这两个指针最多分成三个部分,分别是可丢弃部分,可读部分和可写部分。通过内置的复合缓冲类型实现零拷贝提高效率。
[0105]
具体的将step协议的数据转换为java对象的示例程序如下所示:
[0106]
[0107]
[0108][0109]
利用上述程序,可以先从step协议的数据中读取出消息头、消息体和消息尾的信息,然后,将数据组装到java对象里面去,进而构建出相应的java对象。
[0110]
3.api库对于binary协议的数据使用encode(编码器)基于netty实现java对象到bytebuf的转换。
[0111]
首先,应用层将binary协议的数据装载到api接口定义好的java对象中,随后,encode(编码器)对于java对象基于bytebuf的writebytes方法将每一个字段赋值到bytebuf的消息头、消息体和消息尾中,再基于netty将数据发送外部交易所的不同平台。
[0112]
具体的针对binary协议的数据,将java对象转换为bytebuf的示例程序如下所示:
[0113]
[0114]
[0115]
[0116][0117]
4.api库对于step协议的数据使用encode(编码器)基于netty实现java对象到bytebuf的转换。
[0118]
首先,应用层将数据装载到api接口定义好的java对象中,随后,encode(编码器)将java对象转为step特性的string字符串并赋值到bytebuf中。在以往的交易平台中,对于step协议的数据,无法做到对bytebuf和java对象进行字段的一一对应,这需要api库进行复杂的拆分组装。而在本技术中的应用层使用java对象则更加方便和快捷。最后,基于netty将转换的数据发送给外部交易所的不同平台。
[0119]
具体的针对step协议的数据,将java对象转换为bytebuf的示例程序如下所示:
[0120]
[0121][0122]
由此可见,利用上述程序代码,可以实现从java对象转换为bytebuf以及从bytebuf转换为java对象的处理。所述程序代码仅仅是所述协议转换的示例说明,而不是要将其局限于此。本领域的技术人员可以根据自身的需要和应用的具体环境,对所述程序代码进行修改和重组,这些都属于本技术的保护范围。
[0123]
通过将交易所的不同协议类型的数据转换为应用程序可以快速使用的java对象,使得所述交易所应用平台不仅能够同时支持上海证券交易所和深圳证券交易所的多种数据协议(binary协议和step协议),而且,如果今后还有别的交易所接入,也可扩展支持新接入交易所)。
[0124]
而且,通过提供统一的api库,本方案的良好的抽象设计支持多个交易所的多种数
据协议,让应用层代码耦合性更低,扩展性更好,把跟交易所交互的底层都统一由api库处理,从而提供了稳定、高效、良好的编程体验。
[0125]
虽然以上描述了不同的实施例,但应当理解的是它们只是作为示例而非限制。(诸)相关领域的技术人员将领会,在不偏离如所附权利要求书所定义的本发明的精神和范围的情况下,可以在形式和细节方面进行各种修改。因此,此处所公开的本发明的宽度和范围不应被上述所公开的示例性实施例所限制,而应当仅根据所附权利要求书及其等同替换来定义。
再多了解一些

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

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

相关文献