如何获取Binance WebSocket实时数据流?寻求技术指导
获取Binance WebSocket实时数据流实操指南
基础端点说明
Binance现货提供两个公共WebSocket接入端点:
- 单数据流端点:
wss://stream.binance.com:9443/ws - 多数据流端点:
wss://stream.binance.com:9443/stream
Python 实操示例
- 先安装依赖库
pip install websocket-client
- 单流订阅(以BTCUSDT实时成交数据为例)
import websocket import json def on_message(ws, message): # 解析并打印实时成交数据 data = json.loads(message) print(f"{data['s']} 实时成交:价格 {data['p']},数量 {data['q']}") def on_error(ws, error): print(f"错误:{error}") def on_close(ws): print("连接已关闭") def on_open(ws): # 发送订阅指令 subscribe_cmd = { "method": "SUBSCRIBE", "params": ["btcusdt@trade"], "id": 1 } ws.send(json.dumps(subscribe_cmd)) if __name__ == "__main__": ws = websocket.WebSocketApp("wss://stream.binance.com:9443/ws", on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close) ws.run_forever()
- 多流订阅(同时订阅BTCUSDT、ETHUSDT的1分钟K线)
修改on_open中的订阅参数即可:
subscribe_cmd = { "method": "SUBSCRIBE", "params": ["btcusdt@kline_1m", "ethusdt@kline_1m"], "id": 2 }
JavaScript 实操示例
(浏览器/Node.js环境通用)
const ws = new WebSocket('wss://stream.binance.com:9443/ws'); ws.onopen = () => { const subscribeMsg = JSON.stringify({ "method": "SUBSCRIBE", "params": ["btcusdt@trade"], "id": 1 }); ws.send(subscribeMsg); }; ws.onmessage = (event) => { const data = JSON.parse(event.data); console.log(`${data.s} 实时成交:价格 ${data.p},数量 ${data.q}`); }; ws.onerror = (error) => { console.error(error); }; ws.onclose = () => { console.log("连接已关闭"); };
核心注意事项
- 心跳维护:Binance每30秒发送
ping帧,多数WebSocket库会自动回复pong,手动实现时需处理该逻辑,否则连接会被断开 - 重连逻辑:网络波动或服务器主动断连时,需编写自动重连代码,避免数据中断
- 流标识规则:
@trade代表成交数据,@kline_1m代表1分钟K线,更多流类型可参考Binance官方文档的流列表
内容的提问来源于stack exchange,提问作者Fenil Mendapara
相关产品推荐
相关产品推荐

