Node.js 列出聊天室中的用户

Node.js 列出聊天室中的用户,node.js,sockets,socket.io,nodes,nodejitsu,Node.js,Sockets,Socket.io,Nodes,Nodejitsu,这是一个重复的问题,不过我想请它进一步澄清。 我想使用socket.io创建私人聊天。在谷歌搜索时,我发现了两种解决方案: 使用数组存储活动用户列表 使用房间概念 假设我的应用程序有数百万活跃用户。 我想要的是:我在mysql数据库中有我的朋友列表,当我登录时,我想要所有的朋友及其状态(活动或不活动) 案例1。如果我使用一个数组来存储所有活动用户,那么它工作得很好,但这是将所有连接到我的应用程序的用户存储在一个数组中的好方法吗 案例2。如果我使用房间概念,每个用户朋友都有一个唯一的roomid,

这是一个重复的问题,不过我想请它进一步澄清。
我想使用socket.io创建私人聊天。在谷歌搜索时,我发现了两种解决方案:

  • 使用数组存储活动用户列表
  • 使用房间概念
  • 假设我的应用程序有数百万活跃用户。
    我想要的是:我在mysql数据库中有我的朋友列表,当我登录时,我想要所有的朋友及其状态(活动或不活动)

    案例1。如果我使用一个数组来存储所有活动用户,那么它工作得很好,但这是将所有连接到我的应用程序的用户存储在一个数组中的好方法吗

    案例2。如果我使用房间概念,每个用户朋友都有一个唯一的roomid, 然后,每当用户登录时,他必须加入所有这些roomid。这对我也很有效,但在这种情况下,我如何知道我的朋友是否活跃


    我想知道此解决方案中的哪一个适用于拥有数百万用户的我的应用程序,或者是否有其他方法来解决此问题。

    我将使用第三个解决方案:

    • 将用户设置为每个套接字
    • 在需要列出房间中的用户时,随时查看房间中的客户端套接字列表
    如果您使用的是socket.IO 1.0之前的版本,那么您可以使用
    IO.sockets.clients(roomName)
    在房间中获取套接字

    对于socket.IO 1.0,现在还不清楚什么是最干净的解决方案来列出连接到房间的插座:

    现在,这里有一个变通功能:

    function roomSockets(roomId) {
        var clients = io.sockets.adapter.rooms[roomId],
            sockets = [];
        for (var clientId in clients) sockets.push(io.sockets.connected[clientId]);
        return sockets;
    }
    

    请注意,它可能不适用于所有适配器,因此它充其量只是一种解决办法。

    您能否准确说明您正在使用的socket.IO版本,以及您是否计划使用多个节点或仅使用一个节点?我使用0.9.16版本的socket.ioi used var clients=IO.sockets.clients('room1');控制台输出:[对象对象]如何打印所有客户端列表使用
    io.sockets.clients('room1').forEach(函数{console.log})示例:是的,我正在以相同的方式进行操作,其输出是[object object]如何解析对象,我希望此arrayA解决方案中的数据是使用和。