首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FAST 协议

FAST 协议

根据文档看来,每个单独的包的结构是这样的,每个包以8=STEP.1.0.0开始以10=xxx再加上个0x01结束。xxx代表校验和,基本是key-value的形式。对这个数据的解析关键在于里面有一个描述data内容的部分。之前很少考究过这些算法。昨天迫不得已用JAVA写出了一个从VDE(一个接受来自上交所的数据,并且和我们的解析工具连接,就是起个连接作用当然还有别的比如登录之类的功能)上接受数据包,然后把每个数据包生成文件,提供给我的同事一起来研究。


对于这样的数据包截取的算法我是这样组的,首先定义一个


byte[] b =
new byte[20];


然后一个一个读入到b中,接着判断b中前12位是否是8=STEP.1.0.0,如果是那么就意味着一个数据包开始了,然后一直往b中填写,当b中填满的时候,就每次移出去前面的1个元素,这个用一个临时的byte[] 来做交换用,接着判断结尾是否0x01 10=


如果是的话那么意味着接下来只要读到0x01就可以结束了,这样就得到了一个完整的包。


http://www.51testing.com/html/43/2243-210502.html


http://www.financecomputing.net/wordpress/?p=44


http://jettekfix.com/node/36



fix协议有两层:会话层和应用层。会话层主要是负责传输数据,而应用层则是处理相关的业务数据。
作为一个标准,FIX定义了以下的格式规范:
"Tag=Value" syntax
FIXML syntax (在以后的文章中描述)
通常的fix消息组成为:消息头部,消息体和结束符
每个消息由 = 字段组成,字段之间通过结束符分割。其中,
Tags are of data type TagNum.每个tag都定义了一个number对应。类似与网络端口分配,有已经定义的和用户可以自定义的。
也就是说,在业务层面,数据传输符合上述的字段-值格式。



在传输的过程:对于消息的压缩处理,主要采用pmap+field segment方式,其中:pmap标记了该消息中包含了那些字段,而field segment则是各自段具体的压缩数据。
压缩算法:
首先生成pmap,然后再加入数据。(pmap之后,通常增加了模版ID字段值,再加入其它定义的数据字段值)。
对于数据的压缩算法,采用了Stop bits encoding方式,每个字节的最高位,标志了消息中该字段是否结束(0标识没有结束,1标识结束,对于数据的存储,按照7bit进行划分)。
样例:
假设我们要对于58=HelloWorld进行FAST压缩,假设该消息对应的模版ID为1.
1.生成PMAP,压缩后的消息包含了两个字段,模版ID和58field对应的消息内容(helloworld);
可以用1个byte标志消息中出现的字段,110 0000,最高为置为1,标志结束;则第一个byte为1110 0000 = 0xE0;
2.下一个field为模版ID, ID为1, 000 0001,最高为置为1,标志结束;则第二个byte为1000 00001 = 0x81;
3.下一个字段为58field对应的消息,hello world,对应的16进制表示为:
H=0x48, e=0x65, l=0x6C, l=0x6C, o=0x6F, W=0x57, o=0x6F, r=0x72, l=0x6C, d=0x64.二进制为:
1001000 1100101 1101100 1101100 1101111 1010111 1101111 1110010 1101100 1100100。
此时,需要通过最高为置1标志字段数据的结束;即:
01001000 01100101 01101100 01101100 01101111 01010111 01101111 01110010 01101100 11100100
以上为基本的压缩方式。

返回列表