使用Gorilla 在Go 中使用Websocket 時,向單一客戶端發送更新可能是一項複雜的任務。本文深入探討如何有效實現這一目標的細節。
目標是在客戶端和伺服器之間建立 Websocket 連線。伺服器應該檢索來自客戶端的輸入,使用 Go 通道從索引中獲取數據,然後將索引資料寫回特定客戶端的套接字。挑戰在於伺服器程式碼中唯一標識客戶端。
hub.go 中提供的程式碼管理用戶端連接,並包含一個連接映射,該映射最初為每個連接儲存了一個布林值客戶。若要向特定用戶端傳送訊息,可以修改此對應以儲存連線結構。
<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>
在 client.go 中,可以修改連線欄位以儲存客戶端的唯一 ID。
<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>
要向特定客戶端發送訊息,需要修改 Hub 程式碼以包含一個發送通道,該通道接受包含訊息資料和目標 ID 的訊息用戶端。
<code class="go">// hub.go // ... Existing code ... type Hub struct { // ... Existing fields ... // Send channel for specific clients. send chan message } // ... Existing code ...</code>
現在可以使用中心的傳送通道將訊息傳送給特定客戶端。
<code class="go">// ... // Send a message to a client with ID "targetID". hub.send <- message{ID: "targetID", data: messageData} // ...</code>
依照上述步驟,在 Go 中使用 Gorilla 時可以向特定客戶端發送 websocket 訊息。然而,在實現此模式之前考慮廣播的需求至關重要,因為 Gorilla 儲存庫中提供的聊天範例不適合沒有廣播需求的應用程式。
以上是如何使用 Gorilla 在 Go 中向特定客戶端發送 Websocket 訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!