【问题标题】:What is the best way to keep track of which users are online in nodejs?在 nodejs 中跟踪哪些用户在线的最佳方法是什么?
【发布时间】:2012-03-07 22:44:35
【问题描述】:

所以我正在使用 node.js 开发(更多玩)实时游戏,我也在使用 Redis 和 Sockets.io。我让玩家创建一个大厅并加入它(有点像赛前聊天室,您可以在其中与玩家交谈并选择游戏设置)。客户端是用 HTML/CSS/JS 编写的,无论如何我希望能够知道玩家何时从大厅断开连接,以更新界面上加入的玩家数量(以及加入的玩家名称)。

我考虑过的两个选项是:

  1. 使用 redis 的键值超时功能,如果特定字段在 x 时间内未更新,则将其删除。然后我会让主机检查该字段的存在以检查 DC。我确实想知道这是否非常低效,因为可能会有很多用户在玩,所以在 redis 中有很多超时值并且还有很多其他用户轮询这些字段是不是很糟糕。

  2. 我可以使用 sockets.io on('disconnect', ..) 来更新该字段。但是我不确定如果用户的电脑死机,这个事件是否会触发?

无论如何我也愿意接受任何其他想法!

【问题讨论】:

    标签: node.js redis socket.io


    【解决方案1】:

    Socket.io 有一个“心跳”来检查连接是否仍然存在。默认心跳超时时间为 15 秒。您可以在this wiki 中阅读有关配置它的更多信息。如果心跳失败(用户电脑死机),socket.io 将发出 'disconnect' 事件。

    【讨论】:

      【解决方案2】:

      Socket.io 就足够了。您可以configure it to use heartbeats ping 套接字并检查其运行状况。如果用户的计算机死机,它实际上将无法响应这些心跳,从而导致它强制断开连接。

      要对此进行测试,您可以将 Socket.io 设置为使用心跳,然后通过另一台计算机上的浏览器进行连接。而在浏览器过去进入控制台时出现无限循环。使其模拟冻结。

      【讨论】:

      • 对,这是否意味着即使在此刻,'disconnect' 事件也会被触发? (即使它确实必须等待 15 秒/无论配置多少时间)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多