从Websockets读取数据的最佳方法

时间:2017-09-05 21:12:20

标签: go websocket

我正在学习Go(Golang),并考虑到了一个项目。该项目将是一个Web应用程序,从第三方websocket中提取数据流。此时,我正在尝试让我的Go项目读取Web套接字数据,以便我可以解析它。

第三方websocket是JSON对象的数据流。

到目前为止,我已经能够成功收听websocket。但是,我对如何最好地解决这个问题感到困惑。也就是说,我在Websocket库上使用的读取方法正在获得一些字节。转变为JSON对象似乎具有挑战性。有没有更好的方法来读取websocket - 收集JSON对象?

目标

我的目标是收听这个公共Web套接字,获取json对象 - 我可以解析一个我想要的字段,然后将其拉入视图(使用数据流动态更新)。

如果没有,我如何将字节切片转换回JSON对象?

代码

这是我的代码:

    package main

import (
    "golang.org/x/net/websocket"
    "fmt"
    "log"
)

func main(){

    origin := "http://localhost/"
    url := "wss://ws-feed.gdax.com"
    ws, err := websocket.Dial(url, "", origin)
    if err != nil {
        log.Fatal(err)
    }
    if _, err := ws.Write([]byte(`{"type":"subscribe", "product_ids":["LTC-USD"]}`)); err != nil {
        log.Fatal(err)
    }
    var msg = make([]byte, 512)
    var n int
    for 1>0{
        if n, err = ws.Read(msg); err != nil {
            log.Fatal(err)
        }
        fmt.Printf("Received: %s.\n", msg[:n])
    }
}

1 个答案:

答案 0 :(得分:5)

首先,不要使用websocket.Readwebsocket.Write来读取/写入websocket - 更好地使用方便websocket.Message对象及其对应的websocket.Message.Receive()和{ {1}}功能。它们都用于以UTF-8编码或字节序列发送字符串。

如果您希望在套接字上发送JSON对象,最好使用websocket.Message.Send()而不是websocket.JSON.Receive()

按如下方式使用:

websocket.Message.Receive