当前位置: 首页 > 面试题库 >

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

关正雅
2023-03-14
问题内容

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

问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我正在尝试获取当前已连接的所有套接字/客户端的列表。 不幸的是,它不返回数组。 我知道我可以使用数组保留自己的列表,但是由于以下两个原因,这并不是最佳解决方案: 冗余。Socket.IO已保留此列表的副本。 Socket.IO提供了为客户端(即:)设置任意字段值的方法,因此,如果我要维护自己的列表,则需要跟上这些更改。 救命? 问题答案: 在Socket.IO 0.7中,您在名称空间上

  • 问题内容: 这是两个相关的问题。将它们一起发布更有意义。 问题1 我有一个node.js应用程序,它向所有客户端发出事件,所有当前客户端都将发出一个响应。如何创建所有回复到初始发射的客户端的列表,以及可以使用哪种标识来区分客户端? 问题2: 在收集已连接的客户端列表之后,我想做的就是访问一个具有行数的MySQL数据库表,并为每个客户端行分配一个表。这些行将被发回给它们各自的客户端。如何才能做到这一

  • 问题内容: 我最近遇到了一篇博客文章,该文章描述了使用libev的TCP服务器客户端。服务器用来绑定到我熟悉的接口。但是,我也很惊讶地在客户端代码中看到。客户端代码上的相关代码如下: 具体来说,我对这一行很感兴趣: 在服务器端,我知道这会将端口绑定到所有可用接口,但是我不确定在客户端这有何意义。最后,客户端将需要在特定接口上进行连接。以前,我总是指定IP地址或使用。 Linux IP手册页没有讨论

  • 我在unix(OSX)机器上使用kqueue建立了一个TCP/IP echo服务器,它可以打开100个TCP/IP端口,每个端口接受4000个客户端,我使用另外15台机器建立了大约23万个连接。(每道工序4000康纳,每箱4道工序) 服务器似乎可以接受更多,但问题是客户端,建立更多连接是有限制的。如Windows XP-3000、Windows7、UNIX-16384。 我怎么克服?

  • 我想检查一下我的客户是否断开了连接。根据我的研究,一种可能的方式是我可以继续给客户写信。如果客户端未能接收到消息,则表示已断开连接。我向相应的客户端发送消息“Checking Connection:Client”clientNo。 我将clientNo 1连接到服务器,它接收 客户1 但是当我将另一个客户端连接到服务器时,我的clientNo1停止接收来自服务器的消息,我的clientNo2现在将

  • 问题内容: 我正在构建一个小型聊天应用程序,其中客户端A希望通过服务器B将某些东西发送到客户端C。首先,这是解决问题的正确方法吗?我能够向服务器发送数据或从服务器接收数据,但仅限于客户端。例如,如果客户端A向服务器B发送数据而客户端C向服务器B发送数据,则我可以将数据发送回服务器A和C就像回显服务器一样。但是我想要的是将来自客户端A的数据通过服务器B转发到客户端C。 以下是服务器代码: 客户端代码