2012-03-07 84 views
2

所以我正在开发(更多玩耍)node.js中的实时游戏,我也在使用Redis和Sockets.io。我有球员创建一个大厅并加入它(有点像游戏前的聊天室,在那里你可以与玩家交谈并选择游戏设置)。客户端是用HTML/CSS/JS编写的,无论如何,我希望能够告诉玩家何时从大厅断开连接,以更新在界面上加入的玩家数量(以及加入的玩家名字)。我曾经想过跟踪哪些用户在nodejs中联机的最佳方式是什么?

两个选项:

  1. 使用Redis的键值超时功能,删除特定的领域,如果它不是在时间量X更新。然后我会让主人检查这个字段的存在以检查DC。我想知道这是否效率非常低,因为许多用户可能会玩,所以在redis中有很多超时值以及许多其他用户轮询这些字段会很糟糕。

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

无论如何,我也打开任何其他的想法也!

回答

3

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

3

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

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

+0

对,这意味着,即使此刻,'脱节'事件也能够被解雇吗? (即使它必须等待15秒/无论配置多少时间) – 2012-03-08 01:23:59

相关问题