[Moscow.pm] Coro

Alexandr Gomoliako zzz на zzz.org.ua
Чт Янв 26 06:45:57 PST 2012


On 1/26/12, Dmitry Karasik <dmitry at karasik.eu.org> wrote:
> context handle_connection(...);
> tail {
> 	... закончился readable/writable или ошибка ...
> 	again unless $socket-> is_closed;
> }

> ( более полно в lib/IO/Lambda/HTTP.pm )

Догадывался, что так. Но тогда получается никакого смысла в этом нет,
только усложнение кода. Можно писать этот же код без дополнительных
абстракций, линейнее и менее разбросаннее:

tcp_server undef, 55555, sub {
    my ($fh) = @_;
    my ($w, $t, $buf, $handle_connection, $end);

    $handle_connection = sub {

        # readable
        $t = AE::timer 5, 0, $end;
        $w = AE::io $fh, 0, sub {

            my $len = sysread $fh, $buf, ...;

            # writable
            $t = AE::timer 5, 0, $end;
            $w = AE::io $fh, 1, sub {

                my $len = syswrite $fh, $buf, ...;

                # keepalive
                &$handle_connection();
            };
        };
    };

    $end = sub {
        undef $t;
        undef $w;
        ...
    };
};

А раз нету никаких ветвлений, то можно и просто подряд функции писать,
как в примере раньше.


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