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

如何在 Go (Gorilla) 中向客戶端發送特定的 Websocket 訊息?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 21:42:29226瀏覽

How to Send a Specific Websocket Message to a Client in Go (Gorilla)?

在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中文網其他相關文章!

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