> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.6mm.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.6mm.com/_mcp/server.

# 连接订阅与心跳

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

<h2 id="connection-url">
  连接地址
</h2>

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

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

<h2 id="subscribe">
  订阅
</h2>

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

订阅成功回执：

```json
{
  "id": "1772007814666",
  "event": "subscribe",
  "success": true,
  "data": ["market.depth.BTCUSDT"]
}
```

<h2 id="unsubscribe">
  取消订阅
</h2>

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

<h2 id="application-ping">
  应用层 ping
</h2>

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

<h2 id="message-envelope">
  推送外层格式
</h2>

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

```json
{
  "topic": "market.depth.BTCUSDT",
  "event": "data",
  "ts": 1772007815000,
  "data": {}
}
```

<h2 id="operational-recommendations">
  运营建议
</h2>

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

<h2 id="reconnect-workflow">
  重连流程
</h2>

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

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

<h2 id="heartbeat-and-stale-connections">
  心跳与失效连接
</h2>

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

<h2 id="related-documentation">
  相关文档
</h2>

* [公共行情频道](/zh-CN/developer-api/websocket/public-market-channels)：主题、订单簿连续性、成交、K 线和 Ticker。
* [私有用户频道](/zh-CN/developer-api/websocket/private-user-channel)：listenKey 生命周期和鉴权事件。
* [接入建议](/zh-CN/developer-api/integration-recommendations)：重试、幂等、监控和上线测试。