ローカルホストでリッスンし、基本的な呼び出しと応答の種類のインターフェイスを提供するローカル サービスの作成に取り組んでいます。私が始めたいのは、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;
これは機能せず、localhost:44244 に telnet で接続すると、次のようになります。
EV: error in callback (ignoring): AnyEvent::CondVar:
recursive blocking wait attempted at server.pl line 29.
telnet 経由で接続できる小さなシングル スレッド サーバーを作成し、与えられたものを出力してさらに入力を待つ方法を理解すれば、そこからさらに多くのことができると思います。何か案は?