在我写这样的东西之前:
io.sockets.clients().forEach(function (socket) {
socket.emit(signal,data);
});
现在,我无法得到错误Object #<Namespace> has no method 'clients'
还有其他办法吗?这是使用socket v1.0。 (或者我认为是1.0.2)。
为此,我知道我可以使用io.emit()
,但我想迭代套接字并在计时器中对它们执行函数。我可以将所有内容重构为回调并在io.on()
上设置计时器,但我认为我需要能够使用引用(我认为javascript会在这种情况下复制对象socket
而不是引用它吗?)
这是一个例子
setInterval(function(){
io.sockets.clients().forEach(function (socket) {
socket.emit('newMessage',someCalculations());
});
},1000);
答案 0 :(得分:3)
如果必须将有关所有连接套接字的信息发送到单个套接字,那么
for (var i in io.sockets.connected) {
var s = io.sockets.connected[i];
if (socket.id === s.id) {
continue;
}
socket.emit('notify_user_state', s.notify_user_state_data)
}
答案 1 :(得分:1)
这是我目前的解决方案:
var socketList = new Array();
io.on('connection',function(socket){
socketList.push(socket);
});
setInterval(function(){
socketList.forEach(function(){
socket.emit('newMessage',someCalculations());
});
},1000);
答案 2 :(得分:1)
我遇到了同样的问题。尝试使用:
io.sockets.emit('newMessage', someCalculations());
希望有所帮助
答案 3 :(得分:1)
如果您想查找每个连接的客户端。你可以从engine.io
获得它们for (var sid in io.engine.clients) {
io.to(sid).emit('your message', data);
}
io.engine.clients
是一个哈希值。键是套接字ID,值包含一些有用的信息。例如request
。如果您使用passport.socketio
。您可以从该位置获得authed用户。