2017-08-15 11 views
-5

Webアプリケーションにリアルタイム通知機能を実装したいと考えています。私はこの例 "https://github.com/gorilla/websocket/tree/master/examples/chat"に従っています。メッセージを取得するにはサーバー(ハブ)が必要です。何らかのIDのフォームに基づいて個々のクライアントにメッセージをプッシュする必要があります。これどうやってするの?リアルタイムプッシュ通知golang

+5

試しましたか? [最小、完全で検証可能な例](https://stackoverflow.com/help/mcve)を投稿し、それが意図したとおりに機能しなかったことを説明できますか? – Adrian

+0

@ Adrian-サンプルのチャットアプリケーションがあります。特定のユーザーにmsgを送信するしか方法がわかりません。現在、msgは接続されているすべてのクライアントに送信されます。 – amanda45

+0

あなたのコードはどこですか? – Flimzy

答えて

0

あなたが言及したサンプルから:

case message := <-h.broadcast: 
     for client := range h.clients { 
      select { 
      case client.send <- message: 
      default: 
       close(client.send) 
       delete(h.clients, client) 
      } 
     } 
    } 

これは、メッセージがすべてのクライアントに放送された場合です。ご覧のように、登録されているすべてのクライアントをループして、そのすべてのクライアントにメッセージを送信します。

この機能を維持するために、別のケースを追加するだけです。単一のクライアントに送信します。

case message := <-h.clientMessage: 
     for client := range h.clients { 
      if message.ClientID == client.ID { 
       select { 
       case client.send <- message: 
       default: 
        close(client.send) 
        delete(h.clients, client) 
       } 
      } 
     } 
    } 

これはあなたに考えを与えるはずです。私はあなたに残す残りの部分。

注:私のサンプルコードは、例えば、 map[clientID]Clientを使用してクライアントに直接アクセスします。

+0

@ TehSphinX-接続の作成時にClient.IDをどのように送信しましたか?セッションの値と一致するClient.IDが必要です – amanda45

+0

接続時にセッションIDをCookieに送信できますか?マップは[SessionID]クライアントにマップすることができますか? – amanda45

+0

SessionID(またはClientID)は、クライアントではなくサーバーから取得されます。新しいクライアントがサーバーに接続するときに、そのサーバーに一意のIDを割り当てる必要があります。使用しているサーバーによって既に作成されたSessionIDを使用することは賢明かもしれません。 TehSphinX-どのように私はのWebSocketはので、私はこの1つに答えるためにセッションID – TehSphinX

関連する問題