Binance WebSocket 多流订阅:Combined Stream 与 SUBSCRIBE 动态管理

Binance Spot WebSocket 的一个连接可以订阅多个代币的多个数据流,不需要为每个代币单独建连接。

方法一:Combined Stream URL

连接时直接在 URL 里拼接多个 stream,用 / 分隔:

wss://stream.binance.com:9443/stream?streams=btcusdt@trade/ethusdt@trade
wss://stream.binance.com:9443/stream?streams=btcusdt@bookTicker/ethusdt@bookTicker/solusdt@bookTicker

收到的消息会包含 stream 字段标识来源:

{
  "stream": "btcusdt@trade",
  "data": { ... }
}

方法二:SUBSCRIBE 消息(动态添加)

先连接基础 endpoint:

wss://stream.binance.com:9443/ws

连接建立后发送 JSON 消息订阅:

{
  "method": "SUBSCRIBE",
  "params": [
    "btcusdt@aggTrade",
    "ethusdt@aggTrade",
    "solusdt@aggTrade"
  ],
  "id": 1
}

id 是请求 ID,服务端会返回对应的响应(result: null 表示成功):

{
  "result": null,
  "id": 1
}

取消订阅用 UNSUBSCRIBE,结构相同:

{
  "method": "UNSUBSCRIBE",
  "params": ["btcusdt@aggTrade"],
  "id": 2
}

常用 Stream 类型

Stream 名称说明
<symbol>@trade逐笔成交
<symbol>@aggTrade归集成交(合并同一时间同方向同价格的成交)
<symbol>@bookTicker最优挂单(bid/ask 实时更新)
<symbol>@ticker24 小时价格统计
<symbol>@kline_1mK 线(1 分钟,其他周期类似)
<symbol>@depth55 档深度快照
<symbol>@depth@100ms深度增量推送(100ms 间隔)

<symbol> 全小写,如 btcusdtethusdt

数量限制

  • 单个 WebSocket 连接最多订阅 1024 个 stream
  • 超出上限需要新开连接
  • 一般订阅几十到几百个代币的 bookTicker,一个连接完全够用

选哪种方式

场景推荐
启动时订阅固定代币列表Combined Stream URL
运行时动态增减代币SUBSCRIBE / UNSUBSCRIBE
需要区分消息来源Combined Stream(有 stream 字段)

两种方式可以混用:先用 Combined Stream URL 订阅一批,再用 SUBSCRIBE 动态添加新的代币。