Java NIO APIを使用してノンブロッキングIOを実行するサーバーを作成しました。時々クライアントアプリケーションが突然シャットダウンし(例えば、電力損失のために)、接続がサーバー側で開かれたままになる状況があります。NIO - 閉じた接続を検出する
同僚は同じ問題を抱えていて、この種のものを検出するために彼は回線上でハートビートを使用していると言いましたが、私はもっと簡単な方法があると思っています。他の誰かがこの問題に遭遇しましたか?
いくつかの追加情報:私の現在のサーバーデザインは、読み取り/書き込み操作を試みるときにIOException
を捕まえると、キーをキャンセルして対応するチャンネルを閉じます。このアプローチは99%の時間で動作するようです。私は、接続が開いたままに見える状況のほんの一握りを見てきました。
ありがとうZZコーダー - それは私が(恐れて)考えたものです。私はこれがTCPの特徴ではないことに非常に驚いています。 – Adamski
「ping」ではなく、これらのアプリケーションは人間ではありません。 –