我想使用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)
}
连接创建没有错误,但之后,没有消息被读取。
我认为问题在于 API 要求我订阅这样的流:
{
"method": "SUBSCRIBE",
"params": [
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
我知道一个 websocket 连接从一个 HTTP 请求开始,据我所知,我发送这个数据。但是我应该在何时何地这样做?Dial除了 HTTP 标头之外,不提供发送任何内容的选项。
更新:
我设法通过使用 Conn.WriteJSON发送正确的请求并获得正确的响应,如此处所述:
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)
但是,在初始响应之后,不再读取任何数据。我从哪里获得实际的标记价格数据?
哈士奇WWW
相关分类