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

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

Gorilla websocket 如何將二進制數據解組為 JSON?

Gorilla websocket 如何將二進制數據解組為 JSON?

Go
犯罪嫌疑人X 2023-05-08 14:40:59
我正在關注大猩猩提供的聊天示例。我仍然可以解組發送的 json 數據。我應該在readPump():func (c *ChatClient) readPump() {    defer func() {        c.hub.unregisterChan <- c        c.conn.Close()    }()    c.conn.SetReadLimit(maxMessageSize)    c.conn.SetReadDeadline(time.Now().Add(pongWait))    c.conn.SetPongHandler(func(string) error { c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })    for {        _, message, err := c.conn.ReadMessage()        // =================MY CODE START=============        var comment Comment        err = c.conn.ReadJSON(comment)        if err != nil {            LogErr("readjson()", err)            break        }        err = json.Unmarshal(message, comment)        if err != nil {            LogErr("readjson()", err)            break        }        // =================MY CODE END=============        if err != nil {            if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {                LogErr("IsUnexpectedCloseError()", err)            }            break        }        message = bytes.TrimSpace(bytes.Replace(message, newline, space, -1))        c.hub.broadcastChan <- message    }}或在writePump()func (c *ChatClient) writePump() {    ticker := time.NewTicker(pingPeriod)    defer func() {        ticker.Stop()        c.conn.Close()    }()    for {        select {        case message, ok := <-c.send:            c.conn.SetWriteDeadline(time.Now().Add(writeWait))            // CLOSE            if !ok {                c.conn.WriteMessage(websocket.CloseMessage, []byte{})                return            }            w, err := c.conn.NextWriter(websocket.BinaryMessage)            if err != nil {                LogErr("c.conn.NextWriter", err)                return            }LogErr() 方法不打印任何消息。完全迷失在這里。
查看完整描述

1 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

應用程序通過循環在每次迭代中讀取兩條消息,并嘗試將這兩條消息解組為comment. 只讀一條消息。


應用程序調用ReadJSON不Unmarshal正確,從這些函數返回的錯誤解釋了原因:應用程序試圖解組為非指針。


應用程序還將消息的原始字節發送到通道。看起來它可能是您正在復制的任何內容的剩余部分,因此我將在答案的其余部分忽略它。


這是固定循環:


for {

    var comment Comment

    err = c.conn.ReadJSON(&comment)

    if err != nil {

        if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {

            LogErr("IsUnexpectedCloseError()", err)

        }

        break

    }

    // Do something with comment

}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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