2012-03-07 7 views
2

私はnode.jsでリアルタイムゲームを開発しています(もっと遊んでいます)、私はRedisとSockets.ioも使用しています。プレイヤーにロビーを作って参加させる(プレゲームのチャットルームのようなもので、プレイヤーと話したり、ゲーム設定を選択することができます)。クライアントはHTML/CSS/JSで書かれています。とにかく、プレイヤーがロビーから切断されたときに、インターフェイスに参加したプレーヤーの数を更新する(そして参加したプレイヤーの名前を更新する)ことができます。私が考えているnodejでオンラインになっているユーザーを追跡する最善の方法は何ですか?

つのオプションがあります:それは時間のX量に更新されていない場合

  1. Redisのキー値のタイムアウト機能を使用するには、特定のフィールドを削除します。私はその後、DCのチェックを行うために、このフィールドの存在をホストがチェックするようにします。私はこれが非常に非効率的で、多くのユーザーが潜在的にプレイしているのではないかと疑問に思っています。したがって、redisで多くのタイムアウト値を持つことや、

  2. ( 'disconnect'、..)のsockets.ioを使用してフィールドを更新することができます。しかし、たとえば、ユーザーのPCがフリーズするとこのイベントが発生するかどうかはわかりません。

とにかく私は他のアイデアも開いています。

答えて

3

Socket.ioにはまだ接続を確認する 'ハートビート'があります。デフォルトのハートビートタイムアウトは15秒です。 this wikiで詳細を設定することができます。ハートビートが失敗すると(user pcがフリーズする)、socket.ioは 'disconnect'イベントを出力します。

3

Socket.ioで十分です。 configure it to use heartbeatsでソケットにpingを実行し、その状態を確認できます。ユーザーのコンピュータがフリーズすると、実際にはこれらのハートビートに応答できなくなり、強制的に切断されます。

これをテストするには、ハートビートを使用するようにSocket.ioを設定してから、別のコンピュータのブラウザで接続します。ブラウザには過去に無限ループがコンソールにあります。フリーズをシミュレートするようにします。

+0

そうです、それは、今でも、「切断」イベントが解雇されることを意味しますか? (設定されている時間の長さにかかわらず15秒間待たなければならない場合でも) –

関連する問題