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

Retrieving all socket objects in io.socket

本文关键字:套接字 对象 检索 io socket      更新时间:2023-09-26

我希望从io.sockets中取出所有单独的套接字对象,并对每个对象进行迭代。

类似于:

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

要么我做错了,要么我一定错过了什么。想法?

官方方法是:

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

或按房间过滤:

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

这比上面的建议要好,因为socket.io的内部数据结构可能总是会发生变化,并可能在未来的更新中破坏您的所有代码。当你使用这种official方法时,你的风险要小得多。

这可能是也可能不是"文档化的",但有效:

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', { ... });
});

您可以使用优秀的节点检查器连接到您的应用程序并检查s的内容。

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

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