1 回答

TA贡献1951条经验 获得超3个赞
尽管 x/net/websocket 连接具有与 io.Reader 中的 Read 方法具有相同签名的 Read 方法,但该连接不像 io.Reader 那样工作。使用 bufio.Scanner 包裹时,连接将无法正常工作。
poa.st 端点发送消息流,其中每条消息都是一个 JSON 文档。使用以下代码使用Gorilla 包读取消息:
url := "wss://poa.st/api/v1/streaming/?stream=public"
ws, _, err := websocket.DefaultDialer.Dial(url, nil)
if err != nil {
log.Fatal(err)
}
defer ws.Close()
for {
_, p, err := ws.ReadMessage()
if err != nil {
log.Fatal(err)
}
// p is a []byte containing the JSON document.
fmt.Printf("%s\n", p)
}
Gorilla 包有一个用于解码 JSON 消息的辅助方法。这是一个如何使用该方法的示例。
url := "wss://poa.st/api/v1/streaming/?stream=public"
ws, _, err := websocket.DefaultDialer.Dial(url, nil)
if err != nil {
log.Fatal(err)
}
defer ws.Close()
for {
// The JSON documents are objects containing two fields,
// the event type and the payload. The payload is a JSON
// document itself.
var e struct {
Event string
Payload string
}
err := ws.ReadJSON(&e)
if err != nil {
log.Fatal(err)
}
// TODO: decode e.Payload based on e.Event
}
- 1 回答
- 0 关注
- 171 浏览
添加回答
举报