ホームページ  >  記事  >  バックエンド開発  >  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 では、Gorilla を含むいくつかのフレームワークが WebSocket の処理を​​簡素化します。ただし、特定のクライアントにメッセージを送信する方法を理解するのは難しい場合があります。

クライアントとサーバーのセットアップ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。