2012-03-07 41 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

相關問題