fix/fast协议中PMAP(存在图)和Sequence的解析要点
来源:互联网 发布:淘宝怎么绑定支付宝 编辑:程序博客网 时间:2024/05/30 04:26
fix/fast协议中PMAP(存在图)和Sequence的解析要点
吴旻
泰岩网络工作室
因为升级的原因,我整理了一个从前的兄弟写的FIX/FAST解析代码。其中一直让我看不懂的是PMAP和Sequence的解法(因为代码事实上是有问题的),我也没找到相关的文档。下载了Quickfast的安装包,费了牛劲安装好,发现更复杂。好在只用到了一点点,算是把这两件事弄明白了。
PMAP可能没有。
这是一个致命的陷阱。一个正常的消息第一个数据就是PMAP,而且这个PMAP的第一个bit就是指后面有没有此消息的TID。正常的消息一定会有PMAP。
但对于Sequence来说,它后面的第一个数据是这个Sequence的长度。再下一个数据可能是PMAP,也可能是正式的数据。有还是没有,判断错了,后面就全错了。
由于找不到相关的文档,只好查Quickfast的代码。Quickfast的代码显示,有没有PMAP是根据这个template中所有的filed是不是可能用到PMAP有关。如果说,这个template中所有的字段都不需要使用PMAP就能判断出来,那就不会有PMAP出现。比如下面的例子:
<sequence name="BidPriceLevel"presence="optional">
<lengthname="NoBidPriceLevel" id="10068"presence="optional"/>
<int64name="BidSize" id="134"/>
<int32name="BidPx" id="132" decimalPlaces="3"/>
</sequence>
因为Sequence里的field操作符是None,所以这个Sequence就不会有PMAP。有还是没有,是在加载模板后,就要算出来的。
Sequence的长度显式和隐式表示法。
上面的例子中,Sequence下的第一个field指的是全部Sequence的个数,只需要读取一次就够了。千万别把它当成是Sequence中的field。另一种隐式的写法也许更理一些,如下:
<sequence id="73" presence="optional"name="Orders">
<uInt32 id="38" presence="mandatory"name="OrderQty" />
</sequence>
FAST模板是个自相似的结构。
自相似是分形的另一个表述,就是整体和局部非常像,单独拿出来,你分不清哪是整体,哪是局部。这个用函数表述就是递归,一层一层调用,但调用的是同一个函数。quickfast用几十个类去解析,我只用了3个类就做完了。
- fix/fast协议中PMAP(存在图)和Sequence的解析要点
- 【FIX协议】金融信息交换协议(FIX)——采用多播技术的FIX会话
- FIX协议解读笔记2----中国外汇交易中心交易机制和FIX协议QUOTATION/NEGOTIATION部分的对照
- orale 已存在的表和 SEQUENCE 查询和删除
- 金融信息交换协议(FIX)——采用多播技术的FIX会话
- 金融信息交换协议(FIX)——采用多播技术的FIX会话
- 在IDL中使用 sequence 存在的问题及解决办法
- Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)
- fix协议中消息尾校验方法
- base on fix LMAX gateway and feeder 基于FIX协议的 LMAX 流通桥和行情源
- Flashsim中关于FAST算法实现的代码解析
- JSON 解析库的使用 :Gson 和 fast-json比较
- HDU 2454 Degree Sequence of Graph G(Havel定理 判断简单图的存在)
- WebSocket协议中几个容易被忽略的要点
- fix协议封装挑战-将消息字符串解析为实体
- PMAP
- pmap
- pmap
- 程序员笑话
- ECSHOP购物车收货人信息修改
- Android开发之控制Toast的开启与关闭
- Linux 计划任务at和crontab
- C++堆栈以及内存分配
- fix/fast协议中PMAP(存在图)和Sequence的解析要点
- 11478 - Halum(差分约束)
- 鸟哥的linux私房菜 阅读笔记一
- vim visual block模式
- ym——Android从零开始(32)(WebView)(新)
- ural 1002 Phone Numbers 字典树+dp
- getContextPath、getServletPath、getRequestURL、getRealPath的区别
- ios7、ios8中的UITableViewCellEditingStyle
- 连接错误,linker command failed with exit code 1