You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node环境下通过CCXT WebSocket发起Ping/Pong检测延迟

测量CCXT WebSocket连接延迟的有效方法

问题场景

在Node环境下开发基于CCXT的应用服务器,需要测量与远程交易所的WebSocket连接延迟,计划通过主动发送ping并接收pong计算往返时间(RTT),已成功重写handlePong处理函数,但发送ping的尝试未得到预期响应。

正确发送有效Ping的方法

1. 适配交易所要求调用CCXT客户端Ping方法

CCXT的WebSocket客户端封装了对应交易所的协议要求,直接调用客户端实例的ping方法并传入交易所指定的payload,才能触发服务器回复pong:

// 定期触发Ping逻辑
if (!ex.myPing || Date.now() - ex.lastPong > 30000) {
  ex.myPing = Date.now();
  for (const key in ex.clients) {
    if (key.startsWith('ws')) {
      const wsClient = ex.clients[key];
      // 根据交易所文档传入对应格式的Ping数据,例如Binance需传入时间戳JSON
      const pingPayload = JSON.stringify({ ping: Date.now() });
      wsClient.ping(pingPayload, (err) => {
        if (err) console.error('Ping发送失败:', err);
      });
    }
  }
}

2. 直接操作底层WebSocket连接(基于ws库)

若CCXT使用ws库实现WebSocket,可直接调用底层连接的ping方法,注意参数格式:

wsClient.connection.ping(Buffer.from('ping'), true, (err) => {
  if (err) console.error('Ping发送失败:', err);
});

3. 验证Ping发送状态

开启CCXT的 verbose 模式,查看WebSocket帧日志,确认Ping是否成功发送:

ex.setVerbose(true);

替代延迟测量方案

如果标准Ping/Pong机制不生效,可采用以下方式:

  • 初始连接延迟:记录发送WebSocket订阅请求的时间,以及收到第一条推送数据的时间,两者差值作为初始连接延迟参考
  • 业务层心跳:发送交易所支持的业务级心跳指令(如部分交易所的heartbeat请求),通过对应响应计算RTT

内容的提问来源于stack exchange,提问作者Stan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:37:06