Предположим, что существует Java-реализация пула объектов, и объекты успешно подключены к TCP-сокетам.
Я держу поток «Очистка» на уровне пула (ConnectionFactory), который каждые N минут проверяет, простаивает ли пул в течение нескольких M минут (т.е. последний доступ был до M минут, здесь M>N).
И если это так, то закройте все дополнительные сокеты, пока в пуле не останется только основное количество сокетов.
Теперь мне нужно также отследить и устранить резко закрытые сокеты. Это кажется важным, потому что я могу закрыть все рабочие и просто получить пул с резко закрытыми сокетами (закрытыми на другом конце).
Без сомнения, теперь я должен смотреть на уровень Socket, а не на уровень фабрики соединений.
Я провел исследование по «отслеживанию внезапно закрытых сокетов в Java», «очистке пулов соединений», и в API сокетов Java ничего нет, если только мы не отправили несколько ACK или KeepAliveChecks (для каждого сокета). Это означает, что мне нужно выполнять это на каждом сокете на регулярной основе.
Каков наилучший способ (то есть: есть ли другой способ), чтобы я мог в конечном итоге сохранить хороших парней (хорошо подключенные сокеты) в своем пуле?
Как очистить внезапно закрытые сокеты в моем пуле?