在socket.io v1中重复套接字? “…没有办法'客户'”

在我能写这样的东西之前:

io.sockets.clients().forEach(function (socket) { socket.emit(signal,data); }); 

现在,我不能和我得到的错误Object #<Namespace> has no method 'clients'

有没有另外一种方法来做到这一点? 这是套接字v1.0。 (或1.0.2我认为)。

为此,我知道我可以使用io.emit() ,但是我想遍历套接字并在定时器上对它们执行函数。 我可以重构所有的callback,并设置io.on()的计时器,但我想我需要能够使用引用(我认为JavaScript会在这种情况下使对象socket的副本,而不是引用它?)

这是一个例子

 setInterval(function(){ io.sockets.clients().forEach(function (socket) { socket.emit('newMessage',someCalculations()); }); },1000); 

如果有关所有连接的套接字的信息必须发送到一个套接字然后

  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) } 

我有同样的问题。 尝试使用:

 io.sockets.emit('newMessage', someCalculations()); 

希望能帮助到你

这是我目前的解决scheme:

 var socketList = new Array(); io.on('connection',function(socket){ socketList.push(socket); }); setInterval(function(){ socketList.forEach(function(){ socket.emit('newMessage',someCalculations()); }); },1000); 

如果你想找出每个连接的客户端。 你可以从engine.io获取它们

 for (var sid in io.engine.clients) { io.to(sid).emit('your message', data); } 

io.engine.clients是一个散列。 关键是套接字ID和值包含一些有用的信息。 例如request 。 如果您使用passport.socketio 。 你可以从那个地方得到authed用户。