Maison > développement back-end > Golang > Comment envoyer un message Websocket spécifique à un client dans Go (Gorilla) ?

Comment envoyer un message Websocket spécifique à un client dans Go (Gorilla) ?

Mary-Kate Olsen
Libérer: 2024-10-31 21:42:29
original
304 Les gens l'ont consulté

How to Send a Specific Websocket Message to a Client in Go (Gorilla)?

Envoi d'un message Websocket spécifique à un client dans Go (à l'aide de Gorilla)

Les Websockets fournissent un protocole orienté connexion pour une communication à faible latence entre clients et serveurs. Dans Go, plusieurs frameworks simplifient la gestion des websockets, notamment Gorilla. Cependant, comprendre comment envoyer des messages à des clients spécifiques peut être difficile.

Configuration du client et du serveur

Dans Gorilla, le serveur établit un hub pour gérer les connexions client. Le hub comprend une carte des clients et des canaux pour la diffusion des messages. Chaque client dispose d'une connexion Websocket et d'un canal d'envoi.

Identification d'un client spécifique

Pour envoyer un message à un client spécifique, vous avez besoin d'un moyen de l'identifier de manière unique . Généralement, cela se fait en créant un champ ID unique dans la structure client.

Envoi d'un message spécifique

Pour envoyer un message à un client spécifique, vous pouvez soit modifiez le hub ou écrivez directement sur la connexion websocket du client. La modification du hub nécessite la création d'un type de message qui inclut l'ID client cible et les données. Vous remplaceriez alors le canal de diffusion par un canal de message et modifieriez la boucle for du hub en conséquence :

<code class="go">type message struct {
    ID idType
    data []byte
}

func (h *Hub) run() {
    for {
        select {
        case client := <-h.register:
            h.clients[client.ID] = client
        case client := <-h.unregister:
            if _, ok := h.clients[client.ID]; ok {
                delete(h.clients, client.ID)
                close(client.send)
            }
        case message := <-h.send:
            if client, ok := h.clients[message.ID]; ok {
                select {
                case client.send <- message.data:
                default:
                    close(client.send)
                    delete(h.connections, client)
                }
            }
        }
    }
}</code>
Copier après la connexion

L'envoi d'un message à un client spécifique impliquerait alors :

<code class="go">hub.send <- message{ID: targetID, data: data}</code>
Copier après la connexion

Alternativement, vous pouvez écrire directement sur la connexion websocket du client à l'aide de NextWriter ou WriteMessage. Cette approche nécessite de maintenir une connexion avec chaque client et de garantir une écriture monothread sur la connexion.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal