web-dev-qa-db-ja.com

socketioハートビートを使用することの長所/短所

Socket.ioを使用すると、ハートビートを使用して「Socket.IO接続の状態を確認」できます。ハートビートとは正確には何ですか?なぜそれらを使用する必要があるのですか、または使用しないのですか?

39
jhchen

ハートビートは、クライアントからサーバーへ(またはサーバーからクライアントへ、そしてサーバーへと)定期的に送信される小さなメッセージであり、クライアントがまだアクティブであるかどうかを確認します。

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

これが必要なのは、 TCPを介したクリーンな接続終了を保証できない -クライアントがクラッシュした場合、または何か他のことが起こった場合、クライアントから終了パケットを受信せず、サーバーはクライアントが切断されたことを知っています。さらに、Socket.IOは、データを転送するためのさまざまな他のメカニズム(TCPソケット以外))をサポートしており、これらの場合、クライアントはサーバーに終了メッセージを送信しません(または送信できません)。 。

デフォルトでは、Socket.IOクライアントは15秒ごとにサーバーにハートビートを送信します(ハートビート間隔)、サーバーからの応答がない場合クライアントは20秒以内に(ハートビートタイムアウト)、クライアントが切断されたと見なします。

ハートビートを使用したくないと思われる平均的なユースケースはあまり考えられません。

56
Michelle Tilley