【发布时间】:2015-10-12 09:52:35
【问题描述】:
使用 Socket.IO v.1.3.5 用于 node.JS...
如何获取房间中连接的真实用户(不是会话)的数量?
会话数:
var room = io.sockets.adapter.rooms[roomId] || {};
var numSocketsInRoom = Object.keys(room).length;
但是如果同一个用户在多个浏览器标签中连接,numSocketInRoom 会增加,因为是会话数,而不是实际用户数。
在我的情况下,任何套接字都将用户保存在socket.userId,但我不知道如何指出这一点以获取房间中连接的用户数量...
谢谢!
【问题讨论】:
-
好吧,您确实拥有带有
roomID的房间的对象,对于用户,您也可以使用相同的方法var users = {}并在那里添加ID。 -
哦,这是个好主意。我要试试看。
-
确保您还删除了断开连接的用户,更新用户列表的一项改进是添加一些心跳 ping 或基于时间的检查。
-
我在我的解决方案中添加了一个答案。是否需要心跳 ping 或基于时间的检查?我用
socket.on('disconnect',callback) -
只是为了使有关用户的数据无效,也为了使解决方案更加持久,您应该使用 Redis、MongoDB,如果应用程序崩溃您会丢失您的信息。如果您想将应用程序扩展到多个实例,则同样的规则适用。