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>@ticker | 24 小时价格统计 |
<symbol>@kline_1m | K 线(1 分钟,其他周期类似) |
<symbol>@depth5 | 5 档深度快照 |
<symbol>@depth@100ms | 深度增量推送(100ms 间隔) |
<symbol> 全小写,如 btcusdt、ethusdt。
数量限制
- 单个 WebSocket 连接最多订阅 1024 个 stream
- 超出上限需要新开连接
- 一般订阅几十到几百个代币的 bookTicker,一个连接完全够用
选哪种方式
| 场景 | 推荐 |
|---|---|
| 启动时订阅固定代币列表 | Combined Stream URL |
| 运行时动态增减代币 | SUBSCRIBE / UNSUBSCRIBE |
| 需要区分消息来源 | Combined Stream(有 stream 字段) |
两种方式可以混用:先用 Combined Stream URL 订阅一批,再用 SUBSCRIBE 动态添加新的代币。
