连接为什么需要它们
一条网络连接可以无声地死掉:一个路由器把它丢了、一台笔记本睡过去了、一道防火墙把它忘了。在没有流量的情况下,两侧都察觉不到。心跳按一个时间表制造流量,于是「超出时间表的沉默」就成了一个可靠的失效迹象,而不是一个安静的市场。
这个间隔怎么运作
- 这个间隔通常由服务器在登录时指定。
- 客户端必须至少那么频繁地发送;发得更频繁是安全的,发得更慢会让会话被关掉。
- 在 FIX 风格的协议里,一次缺失的心跳会引出一个测试请求;再过一个间隔还没有回答,这条连接就被关闭。
- CME 的断线撤单在下单会话上用的正是那套逻辑。
一个算例
一个网关要求每 60 秒一次心跳,并在大约错过一个间隔之后丢弃这个会话。一个按 60 秒间隔发送的客户端余量为零;一次因为繁忙而延迟的发送就可能被踢掉。而一个在五分钟没有任何一帧之后发出警告的看守程序,对应 300 / 60 = 5 个被错过的间隔,远远超出任何「安静市场」所能解释的范围。
心跳与行情流是两件事
一条连接可以心跳正常、而行情一个字节都不来,这在实务上是最常见的那种困惑。心跳属于会话层:它只说明两端的软件还在互相应答。行情属于内容层:它取决于订阅有没有被接受、这个账户有没有那份权限,以及这个市场此刻有没有在成交。所以当图表冻住时,问题不是「我还连着吗」,而是「最后一帧行情是什么时候到的」——而这两个问题由两个不同的时钟来回答。
在 Senzoukria 里
在一次 Rithmic 登录之后,应用启动一个心跳任务,按网关在它的登录响应里返回的那个间隔发送协议的心跳请求,并向上取整到至少一秒,因为发得比被要求的更快总是安全的,而发得更慢才是让一个会话被丢弃的原因。这个任务在断开时先于读取器停止。对 PnL 和下单 plant 来说,一个独立的看守程序会在读取器仍然声称自己活着、而根本没有任何一帧到达满五分钟时记录一条警告,最多每分钟一次。
常见错误
- 把一次缺失的心跳读成一个安静的市场。
- 在一个会话期间让电脑或网卡进入睡眠,然后指望这条连接还能活下来。
- 以为一次心跳就证明数据在流动;它只证明这个会话还活着。
相关内容
同一栏目
来源
- CME Group Client Systems Wiki: Cancel on Disconnect (2026-10-09)
其他语言版本
常见问题
- 有心跳就意味着我的数据是实时的吗?
- 不意味着。它证明的是这个会话是打开的、而且两侧都在应答。行情数据仍然可能因为别的原因停下来,比如一个权限问题、或者一个被暂停的市场,而心跳照旧在走。
- 如果我的平台错过了心跳会怎样?
- 服务器会关掉这个会话。平台随后必须重连并重新登录,而视具体服务而定,在途委托可能被一个断线撤单机制撤掉。