node.js - 使用套接字 io 连接的客户端用户名列表

标签 node.js express socket.io

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

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

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

然后做这样的事情:

users[0].username

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

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

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

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?

Create a list of Connected Clients using socket.io

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

关于node.js - 使用套接字 io 连接的客户端用户名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788790/

相关文章:

node.js - 头像: React Native and Azure

javascript - 堆栈溢出API的nodejs JSON.parse()

javascript - 将 mongoose 对象映射到 Express js 中的 DTO 对象

node.js - 如何解决sequelize ./types pakage的问题。错误: Package subpath './types' is not defined by "exports" sequalize

javascript - socket.io 是否像 sockjs 一样具有原始 WebSocket 访问权限?

javascript - javascript 中奇怪的关联数组行为

node.js - 如何在 Mongoose 中构建多对多关系?

node.js - 我可以使用一台服务器的相同 Passport.js session 登录其他服务器吗

javascript - Websockets 传输完成

mysql - 如何使用 socket.io 删除所有用户的消息?