4

サーバーからクライアントにメッセージを送信したり、クライアントからサーバーにメッセージを送信したりできます。ただし、サーバー自体から(サーバー)ソケットに(ブロードキャスト)メッセージを送信する必要があるようです。その方法がわかりません。

ケースは、サーバーが(Redisサブスクリプションを介して)おそらく非常に多数のクライアントのサブセットにメッセージを送信する必要があることを学習する場合です。各サーバー側のソケットは、起動する必要があるかどうかを独自に判断できます。私は彼らにチェックをしなければならないことを知らせる方法がわかりません(おそらくクライアントからのメッセージ(?)による「通常」とほぼ同じ方法で)。

FWIWチェックは、handshakeDataのみ(およびその他の非ソケットインスタンス固有のサーバー側構造)を使用して行うことができます。「外部から」handshakeDataにアクセスする方法がある場合は、それも可能です。しかし、決して本当にきれいではありません。

誰か考え/ポインタはありますか?

4

2 に答える 2

1

同様の問題が発生したとき、標準のnodeJS固有のソリューションがあると思いました。私は見つけましたEventEmitter

http://nodejs.org/api/events.html#events_class_events_eventemitter

于 2012-11-26T21:42:28.380 に答える
0

私はついにそれを手に入れたようです(socket.ioコードをデバッグすることによって)。

メッセージハンドラー内で、問題のソケットをフェッチし、イベントおよびその他の属性(通常は追加情報を含む'データ'オブジェクト)で設定された'params'配列を持ちます。これらの2つの呼び出しでsocket.$emit.apply(socket, params)

実際のコードでは:

for (var socketId in io.namespaces['/mynamespace'].sockets) {
    var socket = io.namespaces['/mynamespace'].sockets[socketId];
    var params = ['test event', {'foo': 'bar'}];
    socket.$emit.apply(socket, params);
}
于 2012-07-15T19:50:07.650 に答える