gpt4 book ai didi

go - 从 Websockets 读取数据的最佳方式

转载 作者:IT王子 更新时间:2023-10-29 01:27:05 24 4
gpt4 key购买 nike

我正在学习 Go (Golang) 并且心中有一个项目。该项目将是一个网络应用程序,它从第 3 方网络套接字中提取数据流。此时,我正在尝试让我的 Go 项目读取网络套接字数据,以便我可以解析它。

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

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

目标

我的目标是监听这个公共(public)网络套接字,获取 json 对象——我可以解析它以获得我想要的字段,然后将其拉入 View (使用数据流动态更新。)

如果不是,我如何将 byte slice 段转换回 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])
}
}

最佳答案

首先,不要使用 websocket.Readwebsocket.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)
}
...

关于go - 从 Websockets 读取数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com