[Moscow.pm] nginx-perl prerelease 1.1.6.1

Alexandr Gomoliako zzz на zzz.org.ua
Сб Ноя 12 08:11:52 PST 2011


On 11/12/11, Ruslan Zakirov <ruz at bestpractical.com> wrote:
> 2011/11/12 Yury Pats <yu.pats at gmail.com>:
>> В перспективе nginx-perl сможет заменить mod_perl и apache?

Тут смысл совсем не в функционале модперла апача, а чтобы
можно было запустить что-то в бэкграунде, отправлять запрос
параллельно на несколько бэкендов, создавать очереди
соединений и т.д.

> Врядли. Блокировать это дело нельзя.

Блокировать можно, ничего страшного в этом нет. Просто запускайте
больше воркеров. Никаких проблем, а только больше удобства.

> Юра, если ты не испольщуешь что-то кроме ResponeHandler, то нет
> никакого смысла испольовать mod_perl. Просто перейти на FCGI. Тогда не
> нужен обратный прокси и легко переключиться на другой сервер.

Или уже PSGI, Миягава упорно его развивает http://plackperl.org/

Если посмотрите на асинхронные PSGI северы Feersum и Twiggy, то они
точно так же блокируют воркер при работе с DBI или чем-то таким.


На счет внедрения в AE, то тут API выше уровня, т.е. нет колбэков,
когда можно что-то читать, а только, когда уже полностью прочитано
в указанный буффер.

Да и зачем, наоборот хотелось простоты. Т.е. грубо, создали коннектор,
подключились, создали в колбеке ридер и вернули NGX_READ
из колбэка коннектора, т.е. следующая операция: чтение.
И когда буфер ридера заполнится, вызовется его колбэк.
По-моему достаточно просто.

Кто не заглядывал в код, то вот как выглядит минимально возможный
HTTP 1.0 запрос:

    my $ip      = '1.2.3.4';
    my $port    = 80;
    my $timeout = 15;
    my $buf     = "GET / HTTP/1.0\x0d\x0aHost: asdf\x0d\x0a\x0d\x0a";

    ngx_connector $ip, $port, $timeout, sub {

        return NGX_CLOSE
            if $!;

        my $c = shift;

        ngx_writer $c, $buf, $timeout, sub {

            return NGX_CLOSE
                if $!;

            $buf = '';

            return NGX_READ;
        };

        ngx_reader $c, $buf, 0, 0, $timeout, sub {

            return NGX_READ
                unless $!;

            warn "response: $buf\n";

            return NGX_CLOSE;
        };

        return NGX_WRITE;
    };


Подробная информация о списке рассылки Moscow-pm