代码之家  ›  专栏  ›  技术社区  ›  Gijo Varghese

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

  •  0
  • Gijo Varghese  · 技术社区  · 7 年前

    我试图在用户联机和脱机时发出一个事件。由于用户可以打开多个选项卡,因此可以使用 on('connect') on('disconnect') 行不通

    相反,每次用户加入时,我都会为每个用户创建一个房间并加入他们。要检查用户是否在线,只需计算该房间的客户端数量。如果是 0 他离线了。如果其 >1 他在上网。

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   jfriend00    7 年前

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

    如果你的应用程序中有多个页面,或者你的用户可能会点击刷新,那么你还必须允许在连接之后暂时断开连接。在这种情况下,当您检测到房间计数变为零时,您可以设置一个计时器,等待一小段时间,然后再次检查。如果计时器启动时计数仍然为零,则可以将其视为脱机。

    如果它们只是在页面之间导航,则计数将变为零,然后在计时器触发之前返回到1。每当你得到 connect 事件,则清除该用户挂起的任何计时器。要做到这一点,您必须跟踪一些用户关联对象上的计时器。