使用套接字 io 连接的客户端用户名列表

Posted

技术标签:

【中文标题】使用套接字 io 连接的客户端用户名列表【英文标题】:List of connected clients username using socket io 【发布时间】:2012-02-06 00:13:57 【问题描述】:

我用 NodeJS、socketIO 和 Express 制作了一个带有不同聊天室的聊天客户端。我正在尝试显示每个房间的已连接用户的更新列表。

有没有办法将用户名连接到对象,以便在我这样做时可以看到所有用户名:

var users = io.sockets.clients('room')

然后做这样的事情:

users[0].username

我还可以通过哪些其他方式做到这一点?

已解决: 这有点重复,但是解决方案在任何地方都没有写得很清楚,所以我想我把它写在这里。这是Andy Hin 的post 的解决方案,由mak 回答。还有这篇文章中的cmets。

只是为了让事情更清楚一点。如果你想在套接字对象上存储任何东西,你可以这样做:

socket.set('nickname', 'Guest');    

sockets 也有一个 get 方法,所以如果你想让所有用户都这样做:

for (var socketId in io.sockets.sockets) 
    io.sockets.sockets[socketId].get('nickname', function(err, nickname) 
        console.log(nickname);
    );

正如alessioalex 指出的那样,API 可能会发生变化,自己跟踪用户会更安全。您可以通过在断开连接时使用套接字 id 来做到这一点。

io.sockets.on('connection', function (socket)  
    socket.on('disconnect', function()  
        console.log(socket.id + ' disconnected');
        //remove user from db
    
);

【问题讨论】:

Socket.IO - how do I get a list of connected sockets/clients?的可能重复 如何在 socket.io v 1.0 以上做到这一点 @SojharoMangi For v 1.0+ github.com/Automattic/socket.io/blob/master/examples/chat/… 或 ***.com/a/24393900/2609085 @SojharoMangi 这也可能对您有所帮助***.com/questions/24154480/… 【参考方案1】:

有类似的问题可以帮助你解决这个问题:

Socket.IO - how do I get a list of connected sockets/clients?

Create a list of Connected Clients using socket.io

我的建议是自己跟踪已连接客户端的列表,因为您永远不知道 Socket.IO 的内部 API 何时会发生变化。因此,在每次连接时将客户端添加到数组(或数据库)中,并在每次断开连接时将其删除。

【讨论】:

我尝试跟踪自己,但我怎么知道哪个用户断开了连接?我尝试制作一个功能,在有人断开连接时 ping 所有客户端,但这不是一个非常可靠的解决方案。 io.sockets.on('connection', function (socket) socket.on('disconnect', function() console.log(socket.id + 'disconnected'; ); 很高兴为您提供帮助,顺便说一下,如果我的回答对您有用,您可以接受并点赞。 我知道,但我还没有 15 的声誉,所以我不能。我进行了解决方案编辑并提到了您的用户名。当我达到限制时,我会回去投票。【参考方案2】:

在 socket.io@2.3.0 中你可以使用:

Object.keys(io.sockets).forEach((socketId) => 
  const socket = io.sockets[socketId];
)

【讨论】:

以上是关于使用套接字 io 连接的客户端用户名列表的主要内容,如果未能解决你的问题,请参考以下文章

套接字 io 传输错误

Socket.io - 客户端断开连接后手动重新连接

在nodejs中使用socket.io和net socket

在连接时加入套接字 io 房间

与 engine.io 的 Nodejs 服务器/客户端套接字连接

基本IO模型与非阻塞IO模型