这是一个重复的问题,但我想要求它进一步澄清 我想使用socket.io创建一个私人聊天。谷歌搜索时,我找到了两个解决方案:
假设我的应用有数百万活跃用户 这就是我想要的:我在mysql db中有我的朋友列表,当我登录时,我想要所有朋友及其状态(有效与否)。
案例1.如果我使用数组来存储所有活跃用户,那么它运行得很好,但这是一种存储连接到我的应用程序的所有用户的好方法吗?
案例2.如果我使用房间概念,每个用户朋友都有一个独特的房间, 然后每当用户登录时,他必须加入所有那些房间。它也适用于我,但在这种情况下,我怎么知道我的朋友是否活跃?
我想知道哪个解决方案适用于我的应用程序,该应用程序将拥有数百万用户,或者还有其他方法可以解决此问题。
答案 0 :(得分:2)
我会使用第三种解决方案:
如果您使用的是socket.IO pre 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;
}
请注意,它可能不适用于所有适配器,因此它最多只是一种解决方法。