运行以下服务器和客户端脚本:
服务器(更新):
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say' ;
use AnyEvent ;
use AnyEvent::Socket ;
use AnyEvent::Handle ;
tcp_server 'unix/', '/tmp/.mysocket', sub {
my ( $fh, @args ) = @_ ;
say "Received request" ;
my $hdl = AnyEvent::Handle->new( fh => $fh ) ;
$hdl->push_read(
line => sub {
my ( $hdl, $line ) = @_ ;
say "Received $line" ;
}
) ;
}, sub {
my ( $fh, @sock ) = @_ ;
say "Bound to @sock" ;
} ;
AnyEvent->condvar->recv ;
exit ;
客户(更新):
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say' ;
use AnyEvent ;
use AnyEvent::Socket ;
use AnyEvent::Handle ;
my $done = AnyEvent->condvar ;
tcp_connect "unix/", "/tmp/.mysocket", sub {
my ( $fh ) = @_ or die "unable to connect: $!" ;
say "Connected" ;
my $hdl = AnyEvent::Handle->new( fh => $fh ) ;
$hdl->push_write( "Hello world!\n" ) ;
$done->send ;
} ;
$done->recv ;
say $! ;
exit ;
服务器接收并接受连接请求,但客户端收到“非法搜索”错误,跳过定义的回调tcp_connect
并退出,而不向服务器发送“Hello world”消息。
我究竟做错了什么?
更新
好的..我发现由于AnyEvent
模块的异步性质,客户端会因为脚本结束而获得“非法搜索”。添加一个condvar
变量我解决了这个(非)问题,但服务器仍然没有收到客户端发送的消息。