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!