CTP的通讯方式:
三种:对话,私有和广播。
对话就像TCP/IP,你问我答,CTP里面是请求和相应,C/S模式。
私有是指服务器给一个人发信息,一般用于个人信息查询。
广播就是服务器给所有人发信息,一半用于行情和通知。
对话中服务器发过来的消息称为响应,其他的称为回报。
数据流:
对话采用的双向通信,即数据流也是双向的,称为对话流。对应地,广播流和私有流是单向的。每个模式下也会有很多流,比如交易流、查询流等等。
对于双向流,中断后服务器会重新建立连接,之前的对话不保留,即丢失。(比如对话A发了一个请求,但是中断了,服务器返回的数据不会被新建立的对话B接收到。)
对于单向流,由于是服务器单向发送,之前没发完的会继续发送。
数据交换模式:
请求/应答模式:用于交易。
发布/订阅模式:用于行情。
接口文件:
TraderApi:用于交易
MDApi:用于行情订阅
ApiStruct:数据结构
ApiDataType:数据类型
命名:
请求Req—响应OnReq
查询RspQry—查询响应OnRepQry
订阅(也是请求)—回报/错误回报(OnRtn/OnErrRtn)
上期给的demo里面有个MDSpi和TraderSpi,我们自己写个类调用API去请求,然后用SPI类处理接收到的数据和消息就好了。
通用步骤是:
1. 写两个分别继承于CThostFtdcMdSpi和CThostFtdcTraderSpi的类,可以直接用demo里面的MdSpi类和TraderSpi类,然后分别实例化。然后实例化CThostFtdcTraderApi和CThostFtdcMdApi两个类。
2. 向Api实例注册Spi实例。
3. 向Api注册前置地址,交易和行情的前置地址不一样。
4. 订阅共有流和私有流(交易接口需要,行情不需要),共有流用于接收交易状态等信息,私有流用于接收报单回报等私有数据。模式分为Resume模式(默认模式,断开处续传),Restart模式(全部重新获取),Quick模式(从登陆后开始获取)。
5. 初始化(init)。
6. 等待线程退出(join)。

