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

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

有没有办法将用户名连接到一个对象,所以我可以看到所有的用户名:

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

然后做这样的事情:

 users[0].username 

我还有什么其他的方式可以做到这一点?

解决:这是一种重复,但解决scheme没有写得很清楚,所以我想我在这里写下来。 这是Andy Hin所发布的post的解决方法。 还有这篇文章的评论。

只是为了使事情更清楚。 如果你想在socket对象上存储任何东西,你可以这样做:

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

有类似的问题可以帮助你:

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

使用socket.io创build一个连接的客户端列表

我的build议是跟踪自己的连接客户端列表,因为你永远不知道什么时候Socket.IO的内部API可能会改变。 所以在每个连接上添加客户端到一个数组(或数据库),并在每个断开连接删除他。