2013-09-06 17 views
5

サーバーにsails.jsを設定して、サーバーが一連のクライアントにメッセージをブロードキャストするようにしようとしています。基本的に:Sails.js + socket.io:サーバーからクライアントへのメッセージの送信

  1. Aグループのクライアントは、AJAX要求をサーバーに送信します。
  2. サーバーは要求を処理し、グループBのすべてのクライアントにメッセージを送信します。
  3. グループBのクライアントは、ソケットを介してメッセージを受信して​​何かを表示します。

socket.ioの文書によると、グループBのクライアントに「ルーム」を参加させ、その特定の部屋にサーバーをブロードキャストさせることができるはずですが、クライアント側では、既存の"socket"には "socket.join( 'room')というメソッドはありません。だから、私はすべてのクライアントにユニークなイベントを送信しようとした:

socket.on("connect", function(){ 
    console.log("Client Connected"); 
}); 

socket.on("my_event", function(data){ 
    console.log("my_event received"); 
}); 

これは「sails.io.sockets.emit行うことで正常に動作します(」my_eventを「{...})」サーバー側で、すべての単一のクライアントにイベントを送信するのではありませんか?グループを指定するIDを持つ "my_event_000"のようなイベント名をユニークにすることはできますが、それでもすべてのクライアントに不必要なイベントを送信してしまいます。

「ルーム」を使用する必要がありますか?そしてもしそうなら、どうですか?

答えて

4

これを行うセイルの方法は、あなたの "グループ"をバックアップするモデルを持ち、コントローラーアクションではソケットをGroup.subscribe(groupId, req.socket)のグループに加入させることです。その後、Group.publish(groupId, data)で特定のグループにメッセージを送信できます。

req.listen(groupId)を使用してコントローラ内の任意のルーム名をサブスクライブし、その部屋にreq.broadcast(roomName, data)でブロードキャストすることもできます。

これはすべてSails documentation for working with Socketsです!

+1

もっと具体的な例を教えてください。いくつかのコードが便利です。提供されたリンクでグループのものを見つけることができないようです。 –

+0

Groupは、この例のモデルの名前です。ドキュメントでは、 'Model.subscribe'、' Model.publish'などのようにリストされています。 – sgress454

関連する問題