Senden einer bestimmten Websocket-Nachricht an einen Client in Go (mit Gorilla)
Websockets bieten ein verbindungsorientiertes Protokoll für Kommunikation mit geringer Latenz zwischen Clients und Servern. In Go vereinfachen mehrere Frameworks die Websocket-Verwaltung, darunter auch Gorilla. Es kann jedoch eine Herausforderung sein, zu verstehen, wie Nachrichten an bestimmte Clients gesendet werden.
Client- und Server-Setup
In Gorilla richtet der Server einen Hub zur Verwaltung von Client-Verbindungen ein. Der Hub enthält eine Karte von Clients und Kanälen zum Senden von Nachrichten. Jeder Client verfügt über eine Websocket-Verbindung und einen Sendekanal.
Identifizieren eines bestimmten Clients
Um eine Nachricht an einen bestimmten Client zu senden, benötigen Sie eine Möglichkeit, ihn eindeutig zu identifizieren . Normalerweise geschieht dies durch die Erstellung eines eindeutigen ID-Felds in der Kundenstruktur.
Senden einer bestimmten Nachricht
Um eine Nachricht an einen bestimmten Kunden zu senden, können Sie entweder Ändern Sie den Hub oder schreiben Sie direkt in die Websocket-Verbindung des Clients. Zum Ändern des Hubs muss ein Nachrichtentyp erstellt werden, der die Ziel-Client-ID und Daten enthält. Sie würden dann den Broadcast-Kanal durch einen Nachrichtenkanal ersetzen und die for-Schleife des Hubs entsprechend ändern:
<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>
Das Senden einer Nachricht an einen bestimmten Client würde dann Folgendes umfassen:
<code class="go">hub.send <- message{ID: targetID, data: data}</code>
Alternativ: Sie können mit NextWriter oder WriteMessage direkt in die Websocket-Verbindung des Clients schreiben. Dieser Ansatz erfordert die Aufrechterhaltung einer Verbindung zu jedem Client und die Sicherstellung von Single-Thread-Schreiben auf die Verbindung.
Das obige ist der detaillierte Inhalt vonWie sende ich eine bestimmte Websocket-Nachricht an einen Client in Go (Gorilla)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!