在Go 中向客戶端發送特定的Websocket 訊息(使用Gorilla)
Websocket 為低延遲客戶通訊提供面向連線的協定端和伺服器之間。在 Go 中,多個框架簡化了 websocket 處理,包括 Gorilla。然而,了解如何向特定客戶端發送訊息可能具有挑戰性。
客戶端和伺服器設定
在 Gorilla 中,伺服器建立一個中心來管理客戶端連線。該中心包括用於廣播訊息的客戶端和通道的對應。每個客戶端都有一個 websocket 連線和一個發送通道。
識別特定客戶端
要向特定客戶端發送訊息,您需要一種唯一標識它的方法。通常,這是透過在客戶端結構中建立唯一 ID 欄位來完成的。
傳送特定訊息
要傳送訊息,您可以修改集線器或直接寫入客戶端的websocket連線。修改中心需要建立包含目標客戶端 ID 和資料的訊息類型。然後,您可以用訊息通道取代廣播通道,並相應地修改集線器的for 循環:
<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>
向特定客戶端發送訊息將涉及:
<code class="go">hub.send <- message{ID: targetID, data: data}</code>
或者,您可以使用NextWriter 或WriteMessage 直接寫入客戶端的websocket 連線。這種方法需要維護與每個客戶端的連接並確保單線程寫入連接。
以上是如何在 Go (Gorilla) 中向客戶端發送特定的 Websocket 訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!