Мне кажется, что уязвимость заключается в том, что ваши читатели ждут вечно, независимо от состояния входящего соединения (о котором, конечно, вы не можете знать).
Таким образом, это простоЧтобы решить эту проблему, при необходимости можно использовать метод poll для BlockingQueue
вместо take . Вызов poll
позволяет указать время ожидания, после которогосчитыватель вернет null
, если в очередь не было добавлено никаких данных.
Таким образом, считыватели не останутся заблокированными навсегда и должны относительно быстро вернуться в обычный цикл обработки, позволяя их ресурсамбыть освобождены соответствующим образом.
(Конечно, это не панацея; пока тайм-аут все еще работает, читатели будут потреблять ресурсы. Но в конечном итоге сервер с ограниченными ресурсами будет иметь некоторую уязвимость для атаки DDOS -и это уменьшает его влияние на настраиваемое маленькое окно, вместо того, чтобы, по крайней мере, оставлять ваш сервер постоянно поврежденным.)