Сокет Java принимает длину очереди - PullRequest
2 голосов
/ 03 февраля 2010

Согласно документации Sun по ServerSocket:

Максимальная длина очереди для индикаций входящего соединения (запрос на подключение) установлена ​​равной 50. Если индикация соединения появляется, когда очередь заполнена, соединение отклоняется.

Как я могу увеличить длину очереди? Это узкое место моего сервера.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 03 февраля 2010

Используйте конструктор ServerSocket с параметром backlog.

Вы также можете рассмотреть возможность использования пула потоков (или действительно ExecutorService ) для отправки входящих запросов. В зависимости от того, как вы его создадите, это, как правило, приведет к повышению пропускной способности.

2 голосов
/ 03 февраля 2010

Используйте параметр backlog конструктора ( Javadoc ). Имейте в виду, что вы не сможете увеличить очередь за пределы операционной системы. Это необходимо для предотвращения SYN-атак. Дополнительную информацию см. В этой статье .

0 голосов
/ 05 августа 2010

Чтобы ограничить отклоненное соединение, убедитесь, что вы обрабатываете все запросы на соединение для каждого опроса выбора, прежде чем выполнять какую-либо обработку отправки / получения для этого опроса.

0 голосов
/ 03 февраля 2010

Существует другой конструктор для ServerSocket.

public ServerSocket(int port, int backlog)

где backlog - это размер очереди соединения, который вы хотите. Максимум 50 применяется только к конструктору по умолчанию, который принимает int port

...