分散アプリの 1 つは、ハートビートを使用してピアの切断 (LAN 回線の切断など) を検出しています。心臓の鼓動は必要ですか?
3 に答える
はい。TCP は、物理接続がまだ有効であることのみを示します (つまり、ソケットがルーターまたは OS によって切断されていない)。しかし、アプリケーションの可用性については何も教えてくれません。パイプの反対側のプロセスがループしており、リクエストを処理していない場合、実際には接続されていません。while(1);
たぶん、心臓の鼓動が取れなかったらどうしますか?
回復する方法がない場合、心拍があっても意味がありません。
サーバーからクライアントへのコールバックを使用している場合、失われたコールバックをすべて再送信するようにクライアントがサーバーに要求できる方法が必要ですが、これは簡単ではありません。
また、ハートビートが得られない場合でも、メッセージが後で届かないという意味ではありません。あらゆる種類のネットワーク遅延が発生する可能性があるため、メッセージを再送信しても安全ですか?
心臓の鼓動は簡単な部分ですが、心臓が鼓動していないときにどうするかというのは難しい部分です!
これは、"アプリケーション レベル" で相手側にまだ接続しており、アプリケーションがまだ通信できることを知るための非常に良い方法です。そうしないと、「相手側」には「何も言う」ことがないと仮定する必要があり、「相手側が 35 秒前にネットワーク接続を実際に失った」ことと区別するのが難しくなります。