首頁  >  文章  >  後端開發  >  如何使用 Gorilla 在 Go 中向特定客戶端發送 Websocket 訊息?

如何使用 Gorilla 在 Go 中向特定客戶端發送 Websocket 訊息?

Susan Sarandon
Susan Sarandon原創
2024-11-03 20:17:03418瀏覽

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

使用Gorilla 在Go 中向特定客戶端發送Websocket 訊息

使用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 修改

要向特定客戶端發送訊息,需要修改 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn