オブジェクト プールの Java 実装があり、オブジェクトが TCP ソケットに正常に接続されているとします。
プール レベル (ConnectionFactory) で「クリーンアップ」スレッドを保持し、プールが M 分間アイドル状態になっているかどうかを N 分ごとにチェックします (つまり、最後のアクセスは M 分前で、ここでは M>N)。
その場合は、コア数のソケットだけがプールに残るまで、すべての追加ソケットを閉じます。
ここで、突然閉じられたソケットも追跡して除去する必要があります。動作しているすべてのソケットを閉じて、突然閉じたソケット (反対側で閉じた) を持つプールになってしまう可能性があるため、これは必須のようです。
間違いなく、接続ファクトリ レベルではなく、ソケット レベルを調べる必要があります。
「Java で突然閉じられたソケットのトレース」、「接続プールのクリーニング」について調査しましたが、(各ソケットごとに) ACK または KeepAliveChecks を送信しない限り、Java ソケット API には何もありません。つまり、定期的にすべてのソケットでこれを実行する必要があります。
最良の方法は何ですか (つまり、他に方法はありますか) 良い人 (適切に接続されたソケット) をプールに保持することになりますか?
プールで突然閉じられたソケットをクリーンアップする方法は?