【问题标题】:Iterate over sockets in socket.io v1? "...has no method 'clients'"迭代 socket.io v1 中的套接字? “......没有方法'客户'”
【发布时间】:2014-07-19 15:00:16
【问题描述】:

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

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

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

还有其他方法可以做到这一点吗?这是套接字 v1.0。 (或我认为是 1.0.2)。

为此,我知道我可以使用io.emit(),但我想遍历套接字并在计时器中对它们执行功能。我可以将所有内容重构为回调并在io.on() 上设置计时器,但我认为我需要能够使用引用(我认为在这种情况下,javascript 会复制对象socket 而不是引用它?)

这是一个例子

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

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    这是我目前的解决方案:

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

    【讨论】:

    • 断开连接时删除怎么样?
    【解决方案2】:

    我遇到了同样的问题。尝试使用:

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

    希望对你有帮助

    【讨论】:

    • 虽然根据问题中的示例代码,这在技术上是正确的,但我们并没有真正遍历所有连接的客户端。例如,我们不能根据每个客户端的 ID 或其他数据向每个客户端发出不同的消息。
    【解决方案3】:

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

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

    io.engine.clients 是一个哈希值。关键是套接字 id,值包含一些有用的信息。例如request。如果您使用passport.socketio。您可以从那个地方获得经过身份验证的用户。

    【讨论】:

      【解决方案4】:

      如果必须将所有已连接套接字的信息发送到单个套接字,则

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

      【讨论】:

      • 它对我有用,谢谢@JVE999 应该选择这个答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多