2011-11-04 28 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的内部数据结构总是可以有所变动,并可能将来的更新会破坏您的所有代码。当你使用这种方法时,你的风险要小得多。

+2

这是我对这个奇妙的Socket.io的一个抱怨:​​虽然有很多[示例](http://socket.io/#how-to-use),但没有简明的API文档,让我猜测我的方式对我的第一个建议。 – josh3736

+0

这正是我正在寻找的。谢谢。 –

+1

josh3736是的文档是有点痛处atm。我们应该在我们的代码上运行一个JSDoc工具来创建一个小的API文档。 – 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对我来说很明显。我意识到我的问题并不清楚,谢谢你的回答。 –