ホームページ  >  記事  >  バックエンド開発  >  Go WebSocket メッセージを受信するにはどうすればよいですか?

Go WebSocket メッセージを受信するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-02 14:47:57554ブラウズ

Go で WebSocket メッセージを受信する方法は、クライアント側とサーバー側によって異なります。 クライアント: ReadMessage 関数を使用してメッセージを読み取り、メッセージ タイプ、ペイロード、エラーを返します。サーバー: 接続されたクライアントの ReadMessage メソッドを読み取ります。このメソッドは、メッセージ タイプ、ペイロード、エラーも返します。

Go WebSocket 消息如何接收?

Go WebSocket メッセージを受信するにはどうすればよいですか?

WebSocket は、単一の接続を確立した後、クライアントとサーバーが双方向で通信できるようにする全二重通信プロトコルです。この記事では、Go で WebSocket メッセージを受信する方法について説明します。

クライアントはメッセージを受信します

クライアントでは、ReadMessage 関数を通じてメッセージを受信できます: 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
}

ReadMessage この関数は 3 つの値を返します: メッセージ タイプ (mt )、メッセージ ペイロード (r)、およびエラー (err)。メッセージ タイプは、メッセージのタイプ (テキスト、バイナリなど) を示す整数値です。

サーバーはメッセージを受信します

サーバー側では、クライアント接続の ReadMessage メソッドを通じてメッセージを受信できます:

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
        }

        // 将消息保存到数据库...
    }
}
🎜 同様に、WebSocket メッセージを受信して​​データベースに保存する Go サーバーの例: 🎜rrreee

以上がGo WebSocket メッセージを受信するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。