Согласно документации Sun по ServerSocket:
Максимальная длина очереди для индикаций входящего соединения (запрос на подключение) установлена равной 50. Если индикация соединения появляется, когда очередь заполнена, соединение отклоняется.
Как я могу увеличить длину очереди? Это узкое место моего сервера.
Спасибо.
Используйте конструктор ServerSocket с параметром backlog.
backlog
Вы также можете рассмотреть возможность использования пула потоков (или действительно ExecutorService ) для отправки входящих запросов. В зависимости от того, как вы его создадите, это, как правило, приведет к повышению пропускной способности.
Используйте параметр backlog конструктора ( Javadoc ). Имейте в виду, что вы не сможете увеличить очередь за пределы операционной системы. Это необходимо для предотвращения SYN-атак. Дополнительную информацию см. В этой статье .
Чтобы ограничить отклоненное соединение, убедитесь, что вы обрабатываете все запросы на соединение для каждого опроса выбора, прежде чем выполнять какую-либо обработку отправки / получения для этого опроса.
Существует другой конструктор для ServerSocket.
public ServerSocket(int port, int backlog)
где backlog - это размер очереди соединения, который вы хотите. Максимум 50 применяется только к конструктору по умолчанию, который принимает int port
int port