Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erhalte ich Go WebSocket-Nachrichten?

Wie erhalte ich Go WebSocket-Nachrichten?

WBOY
WBOYOriginal
2024-06-02 14:47:57554Durchsuche

Die Methode zum Empfangen von WebSocket-Nachrichten in Go hängt von der Client- und Serverseite ab: Client: Verwenden Sie die ReadMessage-Funktion, um die Nachricht zu lesen und den Nachrichtentyp, die Nutzlast und den Fehler zurückzugeben. Server: Liest die ReadMessage-Methode des verbundenen Clients, die auch den Nachrichtentyp, die Nutzlast und den Fehler zurückgibt.

Go WebSocket 消息如何接收?

Wie erhalte ich Go WebSocket-Nachrichten?

WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das es Client und Server ermöglicht, nach dem Aufbau einer einzigen Verbindung in beide Richtungen zu kommunizieren. In diesem Artikel wird erläutert, wie Sie WebSocket-Nachrichten in Go empfangen.

Der Client empfängt Nachrichten

Auf dem Client können Sie Nachrichten über die Funktion ReadMessage empfangen: 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 Die Funktion gibt drei Werte zurück: Nachrichtentyp (mt ), die Nachrichtennutzlast (r) und ein Fehler (err). Der Nachrichtentyp ist ein ganzzahliger Wert, der den Nachrichtentyp angibt (Text, Binär usw.).

Der Server empfängt die Nachricht

Auf der Serverseite können Sie die Nachricht über die ReadMessage-Methode der Clientverbindung empfangen:

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)
    }
}

Praktischer Fall🎜🎜Das Folgende ist eine Methode, die WebSocket empfängt Nachrichten und gibt sie an die Konsole aus. Go-Client-Beispiel: 🎜
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
        }

        // 将消息保存到数据库...
    }
}
🎜Ebenso ist hier ein Beispiel für einen Go-Server, der WebSocket-Nachrichten empfängt und in einer Datenbank speichert: 🎜rrreee

Das obige ist der detaillierte Inhalt vonWie erhalte ich Go WebSocket-Nachrichten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn