ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: nginx-0.3.21



On Tue, 17 Jan 2006, Alex Sergeyev wrote:

Можно сделать что нибудь чтоб из перла можно было бы перестартовать
nginx? А сделать релоад модуля из перла без рестарта?

Можно ли сделать не content-handler а что-либо иное на perl? Например
аналог апачного init, child-init-handler и других из mod_perl?

Тогда можно было бы сделать модуль аналогичный Apache::StatINC
который отлавливал бы изменение исходника и вызывал бы релоад
модуля.

По поводу рестарта можно что-то придумать, но не так, как сделано в
Apache::StatINC - куча stat(2) на каждый запрос, включая
запросы, которые никогда не попадут в mod_perl. Причём, как минимум
7 файлов в perl5.8 вообще никогда не изменятся за время работы сервера:

 XSLoader.pm = /usr/local/lib/perl5/5.8.7/mach/XSLoader.pm
 warnings/register.pm = /usr/local/lib/perl5/5.8.7/warnings/register.pm
 Carp.pm = /usr/local/lib/perl5/5.8.7/Carp.pm
 Exporter.pm = /usr/local/lib/perl5/5.8.7/Exporter.pm
 strict.pm = /usr/local/lib/perl5/5.8.7/strict.pm
 constant.pm = /usr/local/lib/perl5/5.8.7/constant.pm
 warnings.pm = /usr/local/lib/perl5/5.8.7/warnings.pm

Ну и вообще на будущее интересно - что будет примерно из этого модуля

Будут обработчики фаз - perl_worker_init, perl_worker_exit,
perl_rewrite, perl_access, etc.
Будет обработчик ответа, полученного от upstream'а.
Будет обработчик выбора upstream'а.

Возможно, можно будет писать сложные обработчики, работающие с другими
серверами, примерно так, как это сделано внутри nginx'а:

sub handler1 {
    $r->handler = handler2;
    rc = start_long_operation1;
    if (rc != OK) {
        return rc;
    }
    handler2;
}

sub handler2 {
    $r->handler = handler3;
    rc = start_long_operation2;
    if (rc != OK) {
        return rc;
    }
    handler3;
}

...


В принципе, можно даже ходить таким способом в базы данных, например,
postgres'овская libpq поддерживает неблокирующиеся соединения. А вот
с mysql - опаньки - там только блокирующиеся, нужно писать свою библиотеку.


Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.