连接订阅与心跳

连接 6MM WebSocket 推送,订阅主题,维护心跳,并安全处理推送外层格式。

以 Markdown 格式查看

WebSocket 适用于行情数据和需要保持实时更新的私有用户状态,避免通过轮询获取高频变化。

连接地址

wss://ws.6mm.com/ws

私有推送需要携带 listenKey 或 access token 等鉴权上下文,具体见私有用户频道文档。

订阅

1{ "id": "1772007814666", "op": "subscribe", "args": ["market.depth.BTCUSDT"] }

订阅成功回执:

1{
2 "id": "1772007814666",
3 "event": "subscribe",
4 "success": true,
5 "data": ["market.depth.BTCUSDT"]
6}

取消订阅

1{ "id": "1772007814667", "op": "unsubscribe", "args": ["market.depth.BTCUSDT"] }

应用层 ping

1{ "id": "1772007814668", "op": "ping", "args": [] }

推送外层格式

公共推送使用统一外层结构:

1{
2 "topic": "market.depth.BTCUSDT",
3 "event": "data",
4 "ts": 1772007815000,
5 "data": {}
6}

运营建议

  • 每次 subscribe、unsubscribe 和 ping 都生成唯一客户端 id
  • 重连后视为新会话,需要重新订阅必要主题。
  • 校验返回的 topic 是否符合服务预期。
  • 私有订单或账户事件处理应保持幂等。
  • 记录连接状态变化、订阅回执和异常断开日志。

重连流程

  1. 关闭或丢弃旧连接,并创建新的 WebSocket 连接。
  2. 私有推送使用仍然有效的 listenKey 或 access token 重新鉴权。
  3. 重新订阅全部必要主题,并等待成功回执。
  4. 获取新快照替换本地订单簿,再处理增量更新。
  5. 如果可能遗漏私有事件,通过 REST 查询对账未完成订单、仓位和余额。

重连应使用有次数和时间上限的指数退避,并加入随机抖动。客户端持续重连时应触发运营告警,不能在无监控的情况下无限重试。

心跳与失效连接

  • 记录最近一次收到消息和收到成功 ping 回执的时间。
  • 使用生产环境确认的心跳间隔和空闲阈值。
  • 超过配置阈值时,即使 TCP 连接看似仍然存在,也应按失效连接处理。
  • 不要复用旧连接的订阅状态;每次重连后都要显式重新订阅。