|
|
|||||
Регистрация: Dec 2003
Сообщений: 4
|
IO::socket
Кто-нить мог бы объяснить, как в приложении на perl постоянно сканировать порт на множественные подключения и обрабатывать их независимо (в т.ч. без использования $sock->accept())
Если вдруг непонятно изъяснился, то конкретизирую - требуется написать демона чата на перле... С устойчивым соединением с сервером. Как при этом использовать IO::socket (или другие какие модули) |
|
|||||
Регистрация: Dec 2003
Сообщений: 4
|
в смысле, "... с устойчивым соединением КЛИЕНТА с демоном[сервером]" :-)
|
|
|||||
Лучше делать ответвление процесса для каждого клиента, как-то так:
$server = IO::Socket::INET->new(Proto=>"tcp",LocalPort=>3000,Type=>SOCK_STREAM,Reuse=>1,Listen=>10); while (1) { while ($client = $server->accept()) { if (fork) { close($client); } else { close($server); ... - общаемся с $client в отдельном процессе. } } }
__________________
Two beer or not two beer?... |
|
|||||
Регистрация: Dec 2003
Сообщений: 4
|
SPV, ммм... боюсь, при открытых для каждого клиента копиях процесса, серер окажется нагруженным и админы не скажут спасибо...
Т.е., в одном приложении это все же сделать проблематично? |
|
|||||
Без $sock->accept() точно не обойтись
Можно попробовать разойтись процессу только на два. Первая часть будет ждать коннектов: while ($client = $server->accept()) И в случае подключения передавать $client второй части. А вторая часть будет постоянно в цикле бегать по всем активным клиентам (которых ей передает первая часть) и обслуживать их...
__________________
Two beer or not two beer?... |
|
|||||
А можно и вообще без раздвояйца обойтись, если использовать IO::Select - это позволит не останавливаться на ожидании каждого нового подключения, а проверять без задержки - есть ли новые желающие подключиться или нет...
__________________
Two beer or not two beer?... |
|
|||||
Регистрация: Dec 2003
Сообщений: 4
|
Cпасибо за мысли :-)
большое |
Часовой пояс GMT +4, время: 00:29. |
|
« Предыдущая тема | Следующая тема » |
|
|