[Moscow.pm] Coro + AnyEvent --- Что не так
Гришаев Анатолий
agrishaev на gmail.com
Чт Окт 15 12:02:28 PDT 2015
Решил просветиться на тему Coro+AnyEvent
Написал простейший сервер
==========================================
#!/usr/bin/perl
use EV;
use Coro::AnyEvent;
use Coro::Handle;
use AnyEvent::Socket qw(tcp_server);
my $channel = Coro::Channel->new();
tcp_server undef, 2000, sub {
my $fh = unblock shift;
my $no = fileno $fh;
async_pool {
print STDERR "connected\n";
last if !$fh->print( "Hi\n");
while(my $msg=$channel->get()){
my ($id, $msg) = split " ", $msg, 2;
next if $id eq $no;
last if ! $fh->print("$id> $msg\n");
}
};
async_pool {
while(defined( my $line = $fh->readline)){
chomp $line;
$channel->put(join " ", $no, $line);
}
};
return;
};
AE::cv->recv;
=========================================
При подключении получаю ошибку
=========================================
connected
EV: error in callback (ignoring): FATAL: $Coro::idle blocked itself - did
you try to block inside an event loop callback? Caught at
/usr/local/lib/perl/5.14.2/Coro/Channel.pm line 83.
Coro::Channel::get('Coro::Channel=ARRAY(0x8c05f98)') called at
/home/gtoly/ev.pl line 15
main::__ANON__('GLOB(0x8c2317c)', 127.0.0.1, 32812) called at
/usr/lib/perl5/AnyEvent/Socket.pm line 1194
AnyEvent::Socket::__ANON__('EV::IO=SCALAR(0x8c3acf8)', 1) called at
/usr/local/lib/perl/5.14.2/Coro/EV.pm line 71
eval {...} called at /usr/local/lib/perl/5.14.2/Coro/EV.pm line 71
Coro::EV::__ANON__ called at /usr/local/lib/perl/5.14.2/Coro.pm
line 715
Coro::_coro_run called at /home/gtoly/ev.pl line 0
=========================================
Что такое, и как это починить?
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20151015/86b7f4fe/attachment.html>
Подробная информация о списке рассылки Moscow-pm