我希望从io.sockets
中获取所有个人套接字对象并迭代它们。
类似的东西:
for (socket in io.sockets.something()) {
// do something with each socket
}
要么我做错了,要么我必须遗漏一些东西。想法?
答案 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(...);}