我正在创建一个本地服务来监听 localhost 并提供一个基本的调用和响应类型接口。我想开始的是一个婴儿服务器,您可以通过 telnet 连接到它并回显它接收到的内容。
我听说 AnyEvent 对此非常有用,但是 AnyEvent::Socket 的文档并没有给出如何做到这一点的很好的例子。我想用 AnyEvent、AnyEvent::Socket 和 AnyEvent::Handle 来构建它。
现在,小服务器代码如下所示:
#!/usr/bin/env perl
use AnyEvent;
use AnyEvent::Handle;
use AnyEvent::Socket;
my $cv = AnyEvent->condvar;
my $host = '127.0.0.1';
my $port = 44244;
tcp_server($host, $port, sub {
my($fh) = @_;
my $cv = AnyEvent->condvar;
my $handle;
$handle = AnyEvent::Handle->new(
fh => $fh,
poll => "r",
on_read => sub {
my($self) = @_;
print "Received: " . $self->rbuf . "\n";
$cv->send;
}
);
$cv->recv;
});
print "Listening on $host\n";
$cv->wait;
这不起作用,如果我 telnet 到 localhost:44244 我得到这个:
EV: error in callback (ignoring): AnyEvent::CondVar:
recursive blocking wait attempted at server.pl line 29.
我想如果我知道如何制作一个小型单线程服务器,我可以通过 telnet 连接到它并打印出它给定的任何内容,然后等待更多输入,我可以从那里走得更远。有任何想法吗?