[Moscow.pm] Coro

Dmitry Karasik dmitry на karasik.eu.org
Чт Янв 26 07:18:29 PST 2012


On Thu, Jan 26, 2012 at 04:45:57PM +0200, Alexandr Gomoliako wrote:
> On 1/26/12, Dmitry Karasik <dmitry на karasik.eu.org> wrote:
> > context handle_connection(...);
> > tail {
> > 	... закончился readable/writable или ошибка ...
> > 	again unless $socket-> is_closed;
> > }
> 
> > ( более полно в lib/IO/Lambda/HTTP.pm )
> 
> Догадывался, что так. Но тогда получается никакого смысла в этом нет,
> только усложнение кода. Можно писать этот же код без дополнительных
> абстракций, линейнее и менее разбросаннее:

Не соглашусь. Три контраргумента:

1: что если sysread/syswrite не смогут записать/прочитать все сразу - требуется
повторный вызов ::io 

2: что если http нужно заменить на https , в котором sysread/syswrite уже просто 
так не катит (т.к. для неблокирущего IO::Socket::SSL требуется шаманство)

3: наконец, линейность в коде внизу, какбы, не такая уж и линейная. Мне лично
нравится lambda-style линейность, особенно когда протокол усложняется.

Смысл в том чтобы было удобнее. Если наоборот, ну чтож, оно не доллар чтоб всем нравится )

/dk

> 
> 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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org

-- 
Sincerely,
	Dmitry Karasik



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