Maison  >  Article  >  développement back-end  >  Comment recevoir des messages Go WebSocket ?

Comment recevoir des messages Go WebSocket ?

WBOY
WBOYoriginal
2024-06-02 14:47:57599parcourir

La méthode de réception des messages WebSocket dans Go dépend du côté client et serveur : Client : utilisez la fonction ReadMessage pour lire le message et renvoyer le type de message, la charge utile et l'erreur. Serveur : lit la méthode ReadMessage du client connecté, qui renvoie également le type de message, la charge utile et l'erreur.

Go WebSocket 消息如何接收?

Comment recevoir les messages Go WebSocket ?

WebSocket est un protocole de communication full-duplex qui permet au client et au serveur de communiquer dans les deux sens après avoir établi une seule connexion. Cet article explique comment recevoir des messages WebSocket dans Go.

Le client reçoit des messages

Sur le client, vous pouvez recevoir des messages via la fonction 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 La fonction renvoie trois valeurs : type de message (mt ), la charge utile du message (r) et une erreur (err). Le type de message est une valeur entière indiquant le type de message (texte, binaire, etc.).

Le serveur reçoit le message

Côté serveur, vous pouvez recevoir le message via la méthode ReadMessage de la connexion client :

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

Cas pratique🎜🎜Voici une méthode qui reçoit WebSocket messages et les envoie à l'exemple de client Go de la console : 🎜
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
        }

        // 将消息保存到数据库...
    }
}
🎜De même, voici un exemple de serveur Go qui reçoit les messages WebSocket et les stocke dans une base de données : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn