Maison  >  Article  >  développement back-end  >  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
Mary-Kate Olsenoriginal
2024-10-31 21:42:29226parcourir

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>

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

<code class="go">hub.send <- message{ID: targetID, data: data}</code>

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!

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