2011-11-04 6 views
6

私は、すべての個体ソケットオブジェクトをio.socketsから取り出して、それらのそれぞれについて繰り返すことを考えています。io.socket内のすべてのソケットオブジェクトを取得する

のような何か:

for (socket in io.sockets.something()) { 
    // do something with each socket 
} 

どちらか私はこの間違ったをやっているか、私は何かが欠けている必要があります。思考?

+0

だから、問題とは何ですか? – thejh

+0

なぜそれを感じますか? –

+0

私はちょうど興味があります、これはどのようなユースケースですか? – alessioalex

答えて

14

公定法は次のとおりです。

部屋によって
io.sockets.clients().forEach(function (socket) { .. }); 

またはフィルタ:

io.sockets.clients('roomname') .. same as above .. 

。これはsocket.ioの内部データ構造として、上記の提案の上にお勧めします常に変更になる可能性があり、潜在的に将来の更新ですべてのコードを壊す。このofficialメソッドを使用すると、リスクが大幅に軽減されます。

+2

これは他にも素晴らしいSocket.ioに関する私の1つの苦情です。多くの[examples](http://socket.io/#how-to-use)がありますが、簡潔なAPIドキュメントはありません。私の最初の提案に。 – josh3736

+0

これはまさに私が探していたものです。ありがとうございました。 –

+1

josh3736はい、ドキュメントはちょっとした痛みです。小さなAPIドキュメントを作成するために、私たちのコードに対してJSDocツールを実行するべきでしょう。 – 3rdEden

2

これはよく、または '文書化' が、働くことはできません。

for (var id in io.sockets.sockets) { 
    var s = io.sockets.sockets[id]; 
    if (!s.disconnected) { 
     // ... 
     // for example, s.emit('event', { ... }); 
    } 
} 

使用io.sockets.clients()

io.sockets.clients().forEach(function(s) { 
    // ... 
    // for example, s.emit('event', { ... }); 
}); 

あなたがに接続する優れたnode-inspectorを使用することができますアプリを開き、sの内容を確認してください。

+0

これはまさに私が必要としていたものです。 io.socketsを調べることが私には明らかでした。私は私の質問が明確ではなかったことを理解しています。 –

関連する問題