Можно ли увеличить QUEUESIZE для прослушивания сокетов Perl? - PullRequest
2 голосов
/ 15 июня 2009

Типичный код сокета для Perl выглядит следующим образом:

bind(Server, sockaddr_in($port, INADDR_ANY))    || die "bind: $!";
listen(Server,SOMAXCONN)                || die "listen: $!";

Как описано в этой странице фактический максимально допустимый предел где-то около 5. Это слишком мало! Я использую файловый сокет Unix и ожидаю очень высокую пропускную способность. Есть ли способ увеличить максимальную длину очереди?

Ответы [ 4 ]

2 голосов
/ 15 июня 2009

Модуль сокета в Perl делает доступными константы из socket.h вашей платформы, поэтому Perl позволит вам указать настолько глубокое отставание, как, скажем, в программе на Си. Рассмотрим:

$ perl -MSocket -le 'print SOMAXCONN'
128
2 голосов
/ 15 июня 2009

Из документа, который вы даете, звучит так, будто ограничение не в Perl, а в операционной системе. Тем не менее, вы пытались настроить его и установить его выше, чем 5? Публикация, на которую вы ссылаетесь, была написана в 1996 году - с тех пор многое изменилось в Perl и операционных системах.

Кроме того, вы можете заглянуть в IO :: Socket (и IO :: Socket :: UNIX), если вам нужен более объектно-ориентированный интерфейс для сокетов Perl.

2 голосов
/ 15 июня 2009

Очередь - это количество ожидающих неподтвержденных () подключений. Вы уверены, что у вас будет большое количество ожидающих соединений? Это не количество активных или используемых соединений. Предположительно, вы как можно быстрее передаете принятые соединения работнику и не обрабатываете их в цикле принятия.

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

1 голос
/ 15 июня 2009

CentOS linux и MAC OS X сообщают, что ограничение составляет 128. Эти ограничения работают для веб-серверов с высокой пропускной способностью и т. Д., Поэтому вы должны быть в порядке. Вам просто нужно использовать что-то вроде IO :: Poll для мониторинга сокетов, на которых у вас есть данные, и сокета, на котором вы слушаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...