Maison  >  Article  >  développement back-end  >  Comment envoyer des messages Websocket à des clients spécifiques dans Go en utilisant Gorilla ?

Comment envoyer des messages Websocket à des clients spécifiques dans Go en utilisant Gorilla ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 20:17:03421parcourir

How to Send Websocket Messages to Specific Clients in Go Using Gorilla?

Envoi de messages Websocket à des clients spécifiques dans Go à l'aide de Gorilla

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.

Le problème

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

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>

La modification du hub

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>

Envoi de messages à un client

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>

Conclusion

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!

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