[Moscow.pm] Coro
Alexandr Gomoliako
zzz на zzz.org.ua
Ср Янв 25 12:29:17 PST 2012
On Wed, Jan 25, 2012 at 12:18 AM, Mons Anderson <mons at rambler-co.ru> wrote:
> Если уж и приводить в пример альтернативный синтаксис, то не CPS, а
> IO::Lambda
Ну это тот же подход. Только можно не изобретать ничего, а просто
использовать функции и колбэки. В общем все равно идеального решения нет.
Как-то так можно для AE, читабельно и не очень сложно
(как бонус у такого кода достаточно хорошая производительность) :
tcp_server undef, 55555, sub {
my ($fh, $host, $port) = @_;
my ($start, $read_timeout, $read, $end);
my ($t, $w, $buf);
$start = sub {
$t = AE::timer 15, 0, $read_timeout;
$w = AE::io $fh, 0, $read;
};
$read_timeout = sub {
...
&$end();
};
$read = sub {
my $len = sysread $fh, $buf, ...;
if ($len) {
$t = AE::timer 15, 1, $write_timeout;
$w = AE::io $fh, 0, $write;
&$write();
...
} elsif (...) {
...
&$end();
}
}
...
$end = sub {
undef $w;
undef $t;
...
};
&$start();
};
Подробная информация о списке рассылки Moscow-pm