跟踪节点js中哪些用户在线的最佳方法是什么?

时间:2012-03-07 22:44:35

标签: node.js redis socket.io

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

我想到的两个选项是:

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

  2. 我可以使用sockets.io('disconnect',..)来更新字段。但是,我不确定如果例如用户的PC冻结,此事件是否会触发?

  3. 无论如何,我也对任何其他想法持开放态度!

2 个答案:

答案 0 :(得分:3)

Socket.io有一个'heartbeat'来检查连接是否还活着。默认心跳超时为15秒。您可以在this wiki中详细了解如何配置它。如果心跳失败(用户pc冻结),那么socket.io将发出'disconnect'事件。

答案 1 :(得分:3)

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

要测试此功能,您可以设置Socket.io以使用心跳,然后通过另一台计算机上的浏览器进行连接。而在浏览器中过去进入控制台的无限循环。导致它模拟冻结。