【问题标题】:Socketio 1.0 get attributes from all clientsSocketio 1.0 从所有客户端获取属性
【发布时间】:2016-12-31 09:54:20
【问题描述】:

我目前正在开发一个简单的 socketio 应用程序,在该应用程序中我向事件发送一些参数并将它们存储到每个套接字中。

socket.on('add user', function (data) {
    if (addedUser) return;

    // we store the username in the socket session for this client.
    socket.nickname = data.nickname;
    socket.userId = data.userId;
...

然后我使用 var io.engine.clients 获取所有 socketio 客户端,并且我试图在其他事件中获取该参数,如下所示:

socket.on('new message', function (data) {

 var clientsRoom = io.engine.clients;

 for(var c in clientsRoom){
    console.log(" Client: " + c.userId); //Error
    console.log(" Client: " + c); //outputs the socket ID
    console.log(" Client: " + c['userId']); //Error
  }
...

但我无法获取之前为所有套接字存储的用户 ID。 ¿ 我做错了什么?

谢谢。

【问题讨论】:

    标签: javascript arrays node.js socket.io


    【解决方案1】:

    您应该使用io.sockets.sockets 而不是io.engine.clients(它们不一样,socket.ioengine.io 之上添加了一个额外的层)。还要确保将其视为对象,而不是数组:

    var clientsRoom = io.sockets.sockets;
    
    for (var id in clientsRoom) {
      var c = clientsRoom[id];
      console.log(" Client: " + c.userId);
      console.log(" Client: " + id);
    }
    

    【讨论】:

    • 如果我在 socket.userId = data.userId 之后放入我的代码一个日志;打印 socket.userId 它打印我的用户 ID。但是使用您的代码,在尝试获取它时,它返回给我: Client: undefined :-(
    • @walolinux 我把我测试过的代码放在了 Gist 中:gist.github.com/robertklep/080f62fc6d7a506d8f5a55bc3bf61252
    • 是的,正在工作,但我意识到我需要列出房间中所有连接的套接字,而不是一般情况下然后获取 userId...
    • @walolinux 看起来你可以使用io.of('/').adapter.rooms[ROOMNAME]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多