On Friday 04 February 2011 09:51:21 Ivan Petrov wrote: > ща пришли к такому варианту перезапуска: > * пишем свой tcp_server (поскольку Марк в AE отказался подобавлять > каллбеки): нужно чтобы он мог пуститься с готовым сокетом, а так же > "спрашивал разрешения" на accept. > * в определенный момент машина перестает > делать accept'ы (клиенты копятся в очереди) > * как только все соединения > обработаны делаем fcntl на сокет чтобы он мог пережить exec * делаем exec > на самого себя и запускаем tcp_server с открытым сокетом. > > по идее клиенты должны "заметить" разве что некоторый простой на периоде > установления соединения.
Посмотрите на реализацию AnyEvent::HTTP::Server (https://github.com/Mons/AnyEvent-HTTP-Server) там у меня как-раз и реализован запуск с готовым сокетом а вот тут: https://github.com/Mons/Daemond/blob/master/lib/test-shared.pl реализован пример AE tcp сервера с префорком т.е. запускаем нужное кол-во процессов (по кол-ву ядер) при достижении определенного размера по vsize (see Proc::Vsize ;)) перестаем в чайлде делать accept, завершаем обработку текущих соединений и выходим. мастер процесс перезапускает чайлда. И еще было-бы интересно все-таки взглнуть на вашу реализацию. -- Vladimir Perepelitsa aka Mons Anderson <[email protected]> / #99779956 -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
