我想使用Binance API的一些 websocket 流。我在这里发布这个是因为我认为这不是 API 的问题,而是我对 websockets 的一般理解。
我尝试订阅流,如官方 gorilla/websocket 示例所述:
conn, res, err := websocket.DefaultDialer.Dial("wss://stream.binance.com/ws/BTCUSD@markPrice", nil)
fmt.Println(conn)
fmt.Println(res)
fmt.Println(err)
for {
_, message, readErr := conn.ReadMessage()
if readErr != nil {
fmt.Println(readErr)
return
}
fmt.Println(message)
}
Run Code Online (Sandbox Code Playgroud)
连接创建时没有错误,但之后就不会读取任何消息。
我认为问题在于 API 要求我订阅流,如下所示:
{
"method": "SUBSCRIBE",
"params": [
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
Run Code Online (Sandbox Code Playgroud)
我知道 websocket 连接从一个 HTTP 请求开始,据我所知,我发送此数据。但我应该在何时何地这样做呢?Dial
不提供发送除 HTTP 标头之外的任何内容的选项。
更新:
我设法使用 Conn.WriteJSON发送正确的请求并获得正确的响应,如此处记录的:
{
"method": "SUBSCRIBE",
"params": [
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
Run Code Online (Sandbox Code Playgroud)
然而,在初始响应之后,不再读取数据。我从哪里获得实际标记价格数据?
您的连接网址有问题。
流的所有符号均为小写,您发布的文档链接中的 ws 基本端点是wss://stream.binancefuture.com
(永久/永久测试网ws 端点),但您正在使用wss://stream.binance.com
(保证金/现货/储蓄/挖矿ws 端点)。
标记价格流仅适用于永久/永久测试网ws 端点。我使用原始流 url:wss://stream.binancefuture.com/ws/btcusdt@markPrice
没有任何问题
此请求用于实时订阅/取消订阅,仅当已连接到 binance ws 并且想要订阅更多流或取消订阅流时才使用此请求。
{
"method": "SUBSCRIBE",
"params": [
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
Run Code Online (Sandbox Code Playgroud)
您不必使用实时订阅/取消订阅,只需使用上面的原始网址即可:
wss://stream.binancefuture.com/ws/<streamName>
(仅一个流)wss://stream.binancefuture.com/stream?streams=<streamName1>/<streamName2>/<streamName3>
(组合流)
通过使用原始 url,您可以访问<streamName>
(之后您还可以发送使用实时订阅/取消订阅的请求)
归档时间: |
|
查看次数: |
2848 次 |
最近记录: |