Начните закрывать розетки по истечении определенного времени.Если розетка оставалась открытой слишком долго, просто закройте ее.Вы можете сделать это двумя способами:
Вы также можете установить ограничение по времени, которое требуется клиенту для отправки вам запроса.Если они не поддерживают определенный уровень пропускной способности, закройте их.Это может быть довольно легко сделать в цикле чтения, когда ваш поток читает запрос, добавив System.currentTimeInMillis () в начале и сравнивая с тем, где вы находитесь в цикле.Если он дойдет до определенного предела, он отключится и упадет.
Альтернативная идея этой идеи - возможно, не отклонять их, а позволить вашему потоку вернуться в пул, но поместить сокет в стек для наблюдения.Пусть байты накапливаются, и после того, как они достигли определенного размера, вы можете передать их потоку в пул для обработки.Это гибридный подход, чтобы отрезать их от, может быть, они неплохие, но медленные.
Еще один способ справиться с этим - посмотреть, как долго поток работал над запросом, и если он не завершен в течениеограничение по времени закрыть основной сокет.Тогда поток получит SocketException, и он может завершить работу и очистить.
Вот некоторые другие идеи, которые в основном связаны с использованием внешнего оборудования, например брандмауэры, балансировщики нагрузки и т. Д.1012 *