为了账号安全,请及时绑定邮箱和手机立即绑定

使用 gorilla/websocket 订阅 websocket

使用 gorilla/websocket 订阅 websocket

Go
一只斗牛犬 2022-06-21 10:35:58
我想使用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)但是,在初始响应之后,不再读取任何数据。我从哪里获得实际的标记价格数据?
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您的连接网址有问题。


流的所有符号都是小写的,并且您发布的文档链接中的 ws 基本端点是wss://stream.binancefuture.com(Perpetual/Perpetual Testnet ws 端点),但您正在使用wss://stream.binance.com(Margin/Spot/Savings/Mining ws 端点)。


标记价格流仅适用于Perpetual/Perpetual Testnet ws 端点。我使用原始流网址:wss://stream.binancefuture.com/ws/btcusdt@markPrice没有任何问题


此请求用于实时订阅/取消订阅,您仅在已连接到 binance ws 并希望订阅更多流或取消订阅流时使用此请求。


{

    "method": "SUBSCRIBE",

    "params": [

        "btcusdt@aggTrade",

        "btcusdt@depth"

    ],

    "id": 1

}

您不必使用实时订阅/取消订阅,只需使用上面的原始 url就可以了:


wss://stream.binancefuture.com/ws/<streamName>(只有一个流)wss://stream.binancefuture.com/stream?streams=<streamName1>/<streamName2>/<streamName3>(组合流)


通过使用原始 url,您可以访问<streamName>(您也可以在此之后发送请求以使用实时订阅/取消订阅)


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 625 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号