5

サーバーが一連のクライアントにメッセージをブロードキャストするように、sails.js を使用してシステムをセットアップしようとしています。基本的:

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

socket.io のドキュメントによると、グループ B のクライアントを「部屋」に参加させ、サーバーをその特定の部屋にブロードキャストさせることができるはずですが、クライアント側では、既存の「ソケット」はそうではありません。メソッド「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

1 に答える 1

4

これを行う Sails の方法は、「グループ」をサポートするモデルを用意し、コントローラー アクションで、Group.subscribe(groupId, req.socket). その後、 を使用して特定のグループにメッセージを送信できますGroup.publish(groupId, data)

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

これはすべて、Sockets を操作するための Sails ドキュメントにあります。

于 2013-10-02T22:16:24.733 に答える