Senzoukria · 术语表

心跳

心跳是客户端与服务器按一个约定的间隔交换的一条小消息,用来在没有其他流量时证明这条连接还活着。如果心跳停了,另一侧就假定这条连接已经死了并把它关掉;而对交易连接来说,那还可能触发在途委托的撤销。

更新于 2026 年 9 月首次发布:2026年10月9日

本页目录
  1. 连接为什么需要它们
  2. 这个间隔怎么运作
  3. 一个算例
  4. 心跳与行情流是两件事
  5. 在 Senzoukria 里
  6. 常见错误
  7. 相关内容
  8. 同一栏目
  9. 来源
  10. 其他语言版本
  11. 常见问题

连接为什么需要它们

一条网络连接可以无声地死掉:一个路由器把它丢了、一台笔记本睡过去了、一道防火墙把它忘了。在没有流量的情况下,两侧都察觉不到。心跳按一个时间表制造流量,于是「超出时间表的沉默」就成了一个可靠的失效迹象,而不是一个安静的市场。

这个间隔怎么运作

  • 这个间隔通常由服务器在登录时指定。
  • 客户端必须至少那么频繁地发送;发得更频繁是安全的,发得更慢会让会话被关掉。
  • 在 FIX 风格的协议里,一次缺失的心跳会引出一个测试请求;再过一个间隔还没有回答,这条连接就被关闭。
  • CME 的断线撤单在下单会话上用的正是那套逻辑。

一个算例

一个网关要求每 60 秒一次心跳,并在大约错过一个间隔之后丢弃这个会话。一个按 60 秒间隔发送的客户端余量为零;一次因为繁忙而延迟的发送就可能被踢掉。而一个在五分钟没有任何一帧之后发出警告的看守程序,对应 300 / 60 = 5 个被错过的间隔,远远超出任何「安静市场」所能解释的范围。

心跳与行情流是两件事

一条连接可以心跳正常、而行情一个字节都不来,这在实务上是最常见的那种困惑。心跳属于会话层:它只说明两端的软件还在互相应答。行情属于内容层:它取决于订阅有没有被接受、这个账户有没有那份权限,以及这个市场此刻有没有在成交。所以当图表冻住时,问题不是「我还连着吗」,而是「最后一帧行情是什么时候到的」——而这两个问题由两个不同的时钟来回答。

在 Senzoukria 里

在一次 Rithmic 登录之后,应用启动一个心跳任务,按网关在它的登录响应里返回的那个间隔发送协议的心跳请求,并向上取整到至少一秒,因为发得比被要求的更快总是安全的,而发得更慢才是让一个会话被丢弃的原因。这个任务在断开时先于读取器停止。对 PnL 和下单 plant 来说,一个独立的看守程序会在读取器仍然声称自己活着、而根本没有任何一帧到达满五分钟时记录一条警告,最多每分钟一次。

常见错误

  • 把一次缺失的心跳读成一个安静的市场。
  • 在一个会话期间让电脑或网卡进入睡眠,然后指望这条连接还能活下来。
  • 以为一次心跳就证明数据在流动;它只证明这个会话还活着。

同一栏目

来源

其他语言版本

常见问题

有心跳就意味着我的数据是实时的吗?
不意味着。它证明的是这个会话是打开的、而且两侧都在应答。行情数据仍然可能因为别的原因停下来,比如一个权限问题、或者一个被暂停的市场,而心跳照旧在走。
如果我的平台错过了心跳会怎样?
服务器会关掉这个会话。平台随后必须重连并重新登录,而视具体服务而定,在途委托可能被一个断线撤单机制撤掉。
NEXT

继续阅读