首頁 >後端開發 >Golang >Go WebSocket 訊息如何接收?

Go WebSocket 訊息如何接收?

WBOY
WBOY原創
2024-06-02 14:47:57618瀏覽

Go 中接收 WebSocket 訊息的方法取決於客戶端和伺服器端:客戶端:使用 ReadMessage 函數讀取訊息,傳回訊息類型、負載和錯誤。伺服器:讀取連接客戶端的 ReadMessage 方法,同樣回傳訊息類型、負載和錯誤。

Go WebSocket 消息如何接收?

Go WebSocket 訊息如何接收?

WebSocket 是一種全雙工通訊協議,允許客戶端和伺服器在建立單一連線後進行雙向通訊。本文將介紹如何在 Go 中接收 WebSocket 訊息。

客戶端接收訊息

在客戶端,可以透過ReadMessage 函數接收訊息:

import "github.com/gorilla/websocket"

type Message struct {
    Type int
    Payload []byte
}

func readMessage(conn *websocket.Conn) (*Message, error) {
    mt, r, err := conn.ReadMessage()
    if err != nil {
        return nil, err
    }

    return &Message{
        Type:    mt,
        Payload: r,
    }, nil
}

ReadMessage 函數傳回三個值:訊息類型(mt)、訊息負載(r) 和一個錯誤(err)。訊息類型是一個整數值,表示訊息的類型(文字、二進位等)。

伺服器接收訊息

在伺服器端,可以透過客戶端連線的ReadMessage 方法接收訊息:

func (c *Client) readMessage() (*Message, error) {
    mt, r, err := c.conn.ReadMessage()
    if err != nil {
        return nil, err
    }

    return &Message{
        Type:    mt,
        Payload: r,
    }, nil
}

實戰案例

#以下是一個接收WebSocket 訊息並將其輸出到控制台的Go 用戶端範例:

package main

import (
    "fmt"
    "log"

    "github.com/gorilla/websocket"
)

func main() {
    conn, _, err := websocket.DefaultDialer.Dial("ws://example.com/ws", nil)
    if err != nil {
        log.Fatal("dial:", err)
    }
    defer conn.Close()

    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway,
                websocket.CloseAbnormalClosure) {
                log.Fatal("unexpected close:", err)
            }
            continue
        }

        fmt.Printf("received: %s\n", message)
    }
}

同樣的,以下是一個接收WebSocket 訊息並在資料庫中儲存它們的Go 伺服器範例:

package main

import (
    "database/sql"
    "fmt"
    "log"

    "github.com/gorilla/websocket"
)

func main() {
    // 数据库设置...

    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("upgrade:", err)
    }
    defer conn.Close()

    for {
        _, message, err := conn.ReadMessage()
        if err != nil {
            if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway,
                websocket.CloseAbnormalClosure) {
                log.Fatal("unexpected close:", err)
            }
            continue
        }

        // 将消息保存到数据库...
    }
}

以上是Go WebSocket 訊息如何接收?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn