我想使用一些 Binance API 的 WebSocket 流。我在这里发帖是因为我认为这不是 API 的问题,而是我对 WebSockets 的理解有误。
我尝试订阅一个流,就像 官方 gorilla/websocket 示例 中描述的那样:
我知道websocket连接从一个HTTP请求开始,而在这个请求中,据我所理解,我发送这些数据。但是我应该在何时何地发送呢?
更新: 通过使用Conn.WriteJSON,我成功发送了正确的请求并得到了正确的响应,详情请参见文档here.
我尝试订阅一个流,就像 官方 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)
}
连接已成功创建,但之后没有读取到任何消息。
我认为问题在于API要求我订阅流,如下所示:
{
"method": "SUBSCRIBE",
"params": [
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
我知道websocket连接从一个HTTP请求开始,而在这个请求中,据我所理解,我发送这些数据。但是我应该在何时何地发送呢?
Dial
没有提供除HTTP头之外的任何选项。更新: 通过使用Conn.WriteJSON,我成功发送了正确的请求并得到了正确的响应,详情请参见文档here.
type request struct {
Method string `json:"method"`
Params [1]string `json:"params"`
ID int `json:"id"`
}
markPriceReq := request{"SUBSCRIBE", [1]string{"btcusdt@markPrice"}, 1}
conn.WriteJSON(markPriceReq)
然而,初始响应后不再读取数据。我从哪里获取实际的标记价格数据?