从Websockets读取数据的最佳方法

con*_*sqa 5 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])
    }
}
Run Code Online (Sandbox Code Playgroud)

Shm*_*ein 5

首先,不要使用websocket.Read,并websocket.Write从/到WebSocket读/写-更好的使用便利性websocket.Message对象及其相应的websocket.Message.Receive()websocket.Message.Send()功能.它们都用于以UTF-8编码或字节序列发送字符串.

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

使用方法如下:

    ...    
    type Person struct {
      Name string
      Emails []string
    }

    func ReceivePerson(ws *websocket.Conn) {
      var person Person
      err := websocket.JSON.Receive(ws, &person)
      if err != nil {
         log.Fatal(err)
      }
    ...
Run Code Online (Sandbox Code Playgroud)

  • Shmulik,你太棒了.非常感谢它肯定有效.我试图找出一个JSON机制,它就在那里.谢谢你指点我正确的方向!! (3认同)