如何获取除在Node.js中查看的当前用户之外的在线用户列表

如何获取除在Node.js中查看的当前用户之外的在线用户列表,node.js,socket.io,Node.js,Socket.io,我正在使用socket.io制作一个聊天应用程序,需要在其中显示当前用户列表。 到目前为止,它在显示当前用户列表时工作正常 我使用此代码来维护用户列表 usernames[socket.id] = name;//where name is the name of the user 然后在断开连接时,我再次从列表中删除该用户 delete usernames[socket.id]; 但是,这个方法的问题是假设有三个用户a、b和c 现在,用户列表将在连接事件上填充,如下所示 io.socket

我正在使用socket.io制作一个聊天应用程序,需要在其中显示当前用户列表。 到目前为止,它在显示当前用户列表时工作正常

我使用此代码来维护用户列表

usernames[socket.id] = name;//where name is the name of the user
然后在断开连接时,我再次从列表中删除该用户

delete usernames[socket.id];
但是,这个方法的问题是假设有三个用户a、b和c

现在,用户列表将在连接事件上填充,如下所示

 io.sockets.on('connection', function(socket) { 

    ...

    socket.on('register', function(name) {

    usernames[socket.id] = name;
用户列表将类似于“a、b和c”

但是,我想要的是,对于用户“a”,列表应该显示“b和c”,对于“b”,它应该是“a和c”,对于“c”,它应该是“a和b”

我还考虑在客户端根据一些变量删除它,这些变量存储查看它的用户的名称,但是对于这个聊天,多个用户可以有相同的名称。 因此,如果假设这三个名称都是“a”,那么它将删除这三个名称,而不是仅从列表中删除一个名称


……我想我对这件事没有什么想法了。请帮助我在socket.io中实现它

你的问题实际上与socket.io无关。显示用户列表时,不要显示当前用户

for (userIndex in users) {
    if (users[userIndex].id !== currentUser.id) {
        // Add user to displayed user list
    }
}

事实上,我认为socket.io在其武库中有一些神奇的方法……不过感谢您的回复……这段代码是针对前端的……有时服务器和前端上的相同代码会让人困惑……:(是的,你会在前端使用类似的东西。没有魔法,这个问题也不需要魔法。Socket.IO是你的通信层,仅此而已。虽然它对聊天应用程序很方便,但不应该假设它只能用于这些。它的方法并不是为了一个特定的目的se,如果它有逻辑来做你想做的事情,那它的形式就不好了。为了灵活性,这个东西最好留给你的应用程序。嘿,我怎么能在前端访问socket.id???它认为它只能在服务器端访问…如果我想对了,你是想把currentuser.id称为socket.id,对吗?@Nav,不,我是指的是用户的ID。您确实为用户记录了一些唯一的标识符,对吗?虽然可以获取连接ID,但您不应该使用它。不,用户没有唯一的ID…此聊天针对的是那些只想与技术人员聊天的用户,他们想就我的网站进行一些查询,然后就可以运行了dom用户只会聊天1到2分钟,所以没有必要为我们存储用户id。他们只是询问并去。。。