1、二进制协议基础:什么是二进制协议、为什么交易所选择二进制协议、二进制协议与文本协议对比

1.1 什么是二进制协议

先说说我个人的理解。二进制协议,说白了就是机器和机器之间用「0和1」直接对话。

你想想看,我们人类写的是「BUY 100 BTC @ 50000」,但机器不认这个。它认的是——第1个字节表示操作类型,第2-5个字节表示价格,第6-9个字节表示数量。每个bit都有明确的含义,没有多余的空格、换行、逗号。

我在做早期交易系统时,第一次接触二进制协议,感觉就像在「裸写」数据。没有JSON那种花里胡哨的括号,没有XML的标签,就是纯粹的字节流。但正是这种「纯粹」,带来了极致的性能。

核心定义:二进制协议是一种基于字节流的数据交换格式,数据字段按固定或可变长度排列,通过预定义的偏移量和长度来解析每个字段的值。

举个例子,一个简单的订单消息,用二进制表示可能是这样:

// 二进制订单消息结构(32字节)
// 偏移 0: 消息类型 (1字节) -> 0x01 表示新订单
// 偏移 1: 订单ID (8字节) -> 长整型
// 偏移 9: 价格 (8字节) -> 双精度浮点
// 偏移 17: 数量 (8字节) -> 双精度浮点
// 偏移 25: 方向 (1字节) -> 0x00 买, 0x01 卖
// 偏移 26-31: 保留 (6字节)

字节序列: 01 00 00 00 00 00 00 0A 40 59 38 00 00 00 00 00 40 59 00 00 00 00 00 00 00 00 00 00 00 00 00 00
// 解析结果: 新订单, ID=10, 价格=100.0, 数量=100.0, 方向=买

嗯,这里要注意:二进制协议不一定是「固定长度」的。很多交易所也支持变长消息,但核心思想不变——每个字段的位置和长度都是事先约定好的。

1.2 为什么交易所选择二进制协议

这个问题我当年也问过自己。后来在对接几家头部交易所时,才真正体会到背后的原因。

原因一:速度就是金钱

在量化交易里,微秒级的延迟差距,可能就是盈利和亏损的分界线。二进制协议不需要像JSON那样做字符串解析,不需要做词法分析、语法分析。机器直接按偏移量读取字节,一步到位。

我曾经做过一个对比测试:同样一笔订单消息,JSON解析耗时约 2.3 微秒,二进制解析只需要 0.3 微秒。差了将近 8 倍。在每秒处理几万笔订单的场景下,这个差距就是天壤之别。

原因二:带宽就是成本

你想想看,同样的数据,用文本协议传输,体积可能是二进制协议的 3-5 倍。比如「价格 50000.00」,文本需要 9 个字节,二进制只需要 8 个字节(double)。别小看这点差距,在每秒百万级消息的行情推送中,带宽成本能差出好几倍。

原因三:确定性解析

文本协议有个坑——你不知道字符串里会不会有奇怪的字符。比如价格字段传了个「NaN」或者「Infinity」,解析器可能直接崩溃。二进制协议就没这问题,每个字段都是固定类型,解析逻辑是确定的。

我的经验:在对接某家二线交易所时,他们用的就是JSON协议。有一次行情数据里突然出现了一个超大数字,导致我们的解析器内存溢出。从那以后,我对文本协议就多了一份警惕。

1.3 二进制协议与文本协议对比

直接上对比表,这样更直观:

对比维度 二进制协议 文本协议(JSON/XML)
解析速度 极快(直接内存读取) 较慢(需要字符串解析)
数据体积 小(无冗余字符) 大(有引号、逗号、空格)
可读性 差(需要工具解码) 好(人类可直接阅读)
调试难度 高(需要抓包+解码) 低(直接看日志)
跨语言兼容性 需注意字节序(大小端) 天然跨语言
扩展性 需预留字段或版本号 灵活(可随意加字段)
典型应用 高频交易、行情推送 REST API、WebSocket

说白了,选择哪种协议,取决于你的场景。如果你做的是高频交易,毫秒必争,那二进制协议是唯一选择。如果你做的是策略回测或者风控系统,对延迟不敏感,那文本协议反而更方便。

我个人习惯是:交易链路用二进制,日志和监控用文本。这样既保证了核心链路的性能,又保留了调试的便利性。

1.4 知识体系结构图

下面这张图,是我梳理的二进制协议知识体系。你可以把它当作本章的「地图」:

二进制协议知识体系 二进制协议 基于字节流的数据交换格式 固定偏移 + 预定义长度 + 无冗余字符 三大核心优势 解析速度快 | 数据体积小 | 确定性解析 vs 文本协议 速度差8倍 | 体积小3-5倍 | 调试难度高 高频交易 · 行情推送 · 订单路由

避坑提醒:我曾经在对接某交易所时,忽略了字节序(Endianness)的问题。他们用的是大端序,我默认用了小端序,结果解析出来的价格全是天文数字。排查了整整一个下午才发现。所以,拿到协议文档的第一件事,先确认字节序

好了,关于二进制协议的基础概念,就聊到这里。记住一句话:二进制协议不是银弹,但在对延迟敏感的场景下,它是目前最优的选择


专注资料整理