Lorsque vous travaillez avec des websockets dans Go à l'aide de Gorilla, l'envoi de mises à jour à des clients individuels peut être une tâche complexe. Cet article explique en détail comment y parvenir efficacement.
L'objectif est d'établir une connexion Websocket entre un client et un serveur. Le serveur doit récupérer les entrées du client, récupérer les données d'un index à l'aide d'un canal Go, puis réécrire les données indexées dans le socket du client spécifique. Le défi réside dans l'identification unique du client dans le code du serveur.
Le code fourni dans hub.go gère les connexions client et inclut une carte des connexions qui stockait à l'origine une valeur booléenne pour chacune. client. Pour envoyer des messages à un client spécifique, cette carte peut être modifiée pour stocker une structure de connexion à la place.
<code class="go">// hub.go // ... Existing code ... type Hub struct { // Registered clients. clients map[*Client]bool // Inbound messages from the clients. broadcast chan []byte // Register requests from the clients. register chan *Client // Unregister requests from clients. unregister chan *Client connections map[string]*connection } // ... Existing code ...</code>
Dans client.go, le champ de connexion peut être modifié pour stocker l'ID unique du client.
<code class="go">// client.go // ... Existing code ... type Client struct { // unique ID for each client ID string // Hub object hub *Hub // The websocket connection. conn *websocket.Conn // Buffered channel of outbound messages. send chan []byte } // ... Existing code ...</code>
Pour envoyer des messages à un client spécifique, le code du hub doit être modifié pour inclure un canal d'envoi qui accepte les messages contenant les données du message et l'ID de la cible client.
<code class="go">// hub.go // ... Existing code ... type Hub struct { // ... Existing fields ... // Send channel for specific clients. send chan message } // ... Existing code ...</code>
Les messages peuvent désormais être envoyés à des clients spécifiques en utilisant le canal d'envoi du hub.
<code class="go">// ... // Send a message to a client with ID "targetID". hub.send <- message{ID: "targetID", data: messageData} // ...</code>
En suivant les étapes décrites ci-dessus, il est possible d'envoyer des messages websocket à des clients spécifiques lors de l'utilisation de Gorilla in Go. Cependant, il est crucial de considérer la nécessité de diffuser avant d'implémenter ce modèle, car l'exemple de chat fourni dans le référentiel de Gorilla ne convient pas aux applications sans exigences de diffusion.
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!