检索io.socket中的所有套接字对象

时间:2011-11-04 17:22:07

标签: javascript node.js socket.io

我希望从io.sockets中获取所有个人套接字对象并迭代它们。

类似的东西:

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

要么我做错了,要么我必须遗漏一些东西。想法?

3 个答案:

答案 0 :(得分:14)

官方方法是:

io.sockets.clients().forEach(function (socket) { .. });

或按房间过滤:

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

建议通过以上建议,因为socket.io的内部数据结构总是可能会发生变化,并可能在未来的更新中破坏所有代码。使用此official方法时风险更小。

答案 1 :(得分: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的内容。

答案 2 :(得分:0)

获取所有没有空间的插座:

for (let s of io.of('/').sockets) {
let socket = s[1];
socket.emit(...);}