一尘不染

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

node.js

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

有没有一种方法可以将用户名连接到对象,以便在执行操作时可以看到所有用户名:

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

然后执行以下操作:

users[0].username

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

解决:
这有点重复,但是解决方案在任何地方都不很清楚地写出来,所以我想我会在这里写下来。这是的解决方案后由安迪轩至极被回答。还有这篇文章中的评论。

只是为了使事情更清晰。如果要将任何内容存储在套接字对象上,可以执行以下操作:

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

套接字也有一个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
    }
});

阅读 186

收藏
2020-07-07

共1个答案

一尘不染

还有类似的问题可以帮助您解决此问题:

Socket.IO-
如何获取已连接套接字/客户端的列表?

使用socket.io创建已连接客户端的列表

我的建议是跟踪已连接客户端的列表,因为您永远不知道Socket.IO的内部API何时会更改。因此,在每个连接上,将客户端添加到阵列(或数据库),然后在每个断开连接上,将其删除。

2020-07-07