Javascript 使用SocketIO中的文件室查找用户状态

Javascript 使用SocketIO中的文件室查找用户状态,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,我试图在用户联机和脱机时发出一个事件。由于用户可以打开多个选项卡,因此使用('connect')上的和('disconnect')上的查找联机用户将不起作用 相反,每次用户加入时,我都为每个用户创建一个房间并加入他们。要检查用户是在线的,只需计算那个房间的客户数量。如果是0,则他处于脱机状态。如果是>1,他就在线了 但我想在管理员在线和离线时向他发出一个偶数。我怎样才能做到这一点 在.on('disconnect',…)中,当您从他们的房间中拔出连接时,请检查计数。如果删除前计数为1,则用户现在

我试图在用户联机和脱机时发出一个事件。由于用户可以打开多个选项卡,因此使用('connect')上的
和('disconnect')
上的
查找联机用户将不起作用

相反,每次用户加入时,我都为每个用户创建一个房间并加入他们。要检查用户是在线的,只需计算那个房间的客户数量。如果是
0
,则他处于脱机状态。如果是
>1
,他就在线了

但我想在管理员在线和离线时向他发出一个偶数。我怎样才能做到这一点

.on('disconnect',…)
中,当您从他们的房间中拔出连接时,请检查计数。如果删除前计数为1,则用户现在处于脱机状态(删除后)


如果你的应用程序中有多个页面,或者你的用户可能会点击“刷新”,那么你还必须允许在连接后暂时断开连接。在这种情况下,当您检测到房间计数变为零时,您可以设置一个计时器,等待一小段时间,然后再次检查。如果计时器触发时计数仍然为零,则可以将它们视为脱机。 如果它们只是在页面之间导航,则计数将变为零,然后在计时器触发之前返回到一。每当您收到
connect
事件时,您都会清除该用户挂起的所有计时器。要做到这一点,您必须跟踪某些用户关联对象上的计时器。

中。在('disconnect',…)
上,当您从他们的房间中删除连接时,请检查计数。如果删除前计数为1,则用户现在处于脱机状态(删除后)


如果你的应用程序中有多个页面,或者你的用户可能会点击“刷新”,那么你还必须允许在连接后暂时断开连接。在这种情况下,当您检测到房间计数变为零时,您可以设置一个计时器,等待一小段时间,然后再次检查。如果计时器触发时计数仍然为零,则可以将它们视为脱机。
如果它们只是在页面之间导航,则计数将变为零,然后在计时器触发之前返回到一。每当您收到
connect
事件时,您都会清除该用户挂起的所有计时器。为此,您必须跟踪某个用户关联对象上的计时器。

on('disconnect')
中,当您从他们的房间中删除连接时,请检查计数。如果在您删除之前计数为1,则用户现在处于脱机状态(在您删除它们之后)。如果您的应用程序中有多个页面,则您还必须允许在连接后立即断开连接。在这种情况下,当您检测到房间计数变为零时,您可以设置一个计时器,等待一小段时间,然后再次检查。如果计数仍然为零,则可以将它们视为脱机。如果它们只是在页面之间导航,那么计数将变为零,然后在计时器启动之前返回到一。@jfriend00这是一个非常好的建议。ThanksIn
on('disconnect')
当您从他们的房间中拔出连接时,请检查计数。如果在您删除之前计数为1,则用户现在处于脱机状态(在您删除它们之后)。如果您的应用程序中有多个页面,则您还必须允许在连接后立即断开连接。在这种情况下,当您检测到房间计数变为零时,您可以设置一个计时器,等待一小段时间,然后再次检查。如果计数仍然为零,则可以将它们视为脱机。如果它们只是在页面之间导航,那么计数将变为零,然后在计时器启动之前返回到一。@jfriend00这是一个非常好的建议。谢谢这是个很好的回答。我会等几天,然后再把这个作为答案。让我们看看是否有更好的选择这是一个非常好的答案。我会等几天,然后再把这个作为答案。让我们看看有没有更好的选择