2011-08-15 16 views

答えて

52

ハートビートは、クライアントがサーバーに(またはサーバーからクライアントに戻ってサーバーに戻って)小さな間隔で定期的に送信され、クライアントがまだ周囲にいてアクティブであることを確認します。

例えば、チャットルームを提供するNode.jsアプリがあり、ユーザーが何分も何も言わない場合、実際に接続されているかどうかを判断する方法はありません。所定の間隔(例えば、15秒ごと)でヒアビートを送信することにより、クライアントはサーバにそれがまだ存在することを通知する。それが例えばされている場合。サーバーがクライアントからのハートビートを受信して​​から20秒後に切断されている可能性があります。

cannot be guaranteed a clean connection termination over TCPクライアントがクラッシュしたり、何かが発生したりすると、クライアントからの終了パケットは受信されず、クライアントは切断されたことをサーバーが認識しないため、これが必要です。さらに、Socket.IOは、データを転送するためのさまざまな他のメカニズム(TCPソケット以外)をサポートしています。これらの場合、クライアントはサーバーに終了メッセージを送信しません(または送信できません)。デフォルトでは

、Socket.IOクライアントがサーバに15秒毎(ハートビート間隔)にハートビートを送信し、サーバは20秒(ハートビートタイムアウト)でクライアントからそれを聞いていない場合切断されたクライアントとみなされます。

ハートビートを使用したくない平均的な使用例はほとんどありません。

+1

彼らがなぜ必要なのかを明確にする価値がありますか?サーバーが 'onclose'イベント/コールバックを使ってクライアントを切断するのを検出しないのはなぜですか? – leggetter

+0

良いコール、leggetter。私は少しそれを更新しました。 –

+0

非常に明確な更新。乾杯。 – leggetter

関連する問題