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>
特定のクライアントにメッセージを送信するには、メッセージ データとターゲットの ID を含むメッセージを受け入れる送信チャネルを含めるようにハブ コードを変更する必要があります。 client.
<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 中国語 Web サイトの他の関連記事を参照してください。