1. ホーム
  2. sockets

[解決済み] TCPコネクションをオープンにしておくためにハートビートは必要ですか?

2022-11-18 08:37:11

質問

TCP/IP で通信する 2 つのコンポーネントがあります。 コンポーネントAはサーバー/リスナーとして動作し、コンポーネントBはクライアントです。 この2つはできるだけ早く通信する必要があります。 接続は常に 1 つだけです (この質問には関係ありませんが)。 私の会社のシニア開発者は、2 つのコンポーネント間でアプリケーション レベルのハートビートを使用して、接続が開いたままであることを確認する必要があると言いました。

私は、接続は TCP/IP で開いたままであると考えましたが、これらのアプリケーション間でハートビートを行うことはかなり標準的なプラクティスであると、多くのブログ/サイトを読みました。

コンポーネント A がコンポーネント B をハートビートする理由の一部は、コンポーネント B との通信に問題がある場合 (リンクがダウンしているか、コンポーネント B が実行されていないか) サポートに知らせることができるためであることは知っています。 ハートビートは他の理由でも必要なのでしょうか?たとえば、パイプを開いたままにしておくために、パイプの中に頻繁に何かがあることを確認するためなどですか?

コンポーネント A は現在、コンポーネント B を 20 秒ごとにハートビートし、120 秒間にコンポーネント B から何も受信されなかった場合、接続を閉じます。 その後、コンポーネント B がリンクが切断された場合に定期的に再接続を試みるという前提で、接続のリッスンを再開します。 これは正常に動作します。

私の質問を再度繰り返します。 TCP/IP 接続を維持するためにハートビートは必要ですか?

どのように解決するのですか?

接続方法 が必要です。 は関係なく開いたままですが、死んだ接続を検出するためにプロトコルがハートビートを実装するのはよくあることで、IRC では PING コマンドのようなものです。