亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

來自websocket的Golang bufio在第一次閱讀后中斷

來自websocket的Golang bufio在第一次閱讀后中斷

Go
喵喔喔 2022-11-08 10:44:37
我正在嘗試從 websocket 流式傳輸 JSON 文本。但是,在初次閱讀后,我注意到流似乎中斷/斷開連接。這是來自 Pleroma 服務器(想想:Mastodon)。我正在使用默認的 Golang websocket 庫。package mainimport (    "bufio"    "fmt"    "log"    "golang.org/x/net/websocket")func main() {    origin := "https://poa.st/"    url := "wss://poa.st/api/v1/streaming/?stream=public"    ws, err := websocket.Dial(url, "", origin)    if err != nil {        log.Fatal(err)    }    s := bufio.NewScanner(ws)    for s.Scan() {        line := s.Text()        fmt.Println(line)    }}在初始 JSON 文本響應之后,for 循環中斷。我希望它每隔幾秒鐘發送一條新消息。這可能是什么原因造成的?如果我可以使用 Gorilla websocket 庫,我愿意切換到bufio.謝謝!
查看完整描述

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

}


查看完整回答
反對 回復 2022-11-08
  • 1 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號