jrhmpt01:/root/async# cat a6.pl use AnyEvent::HTTP; use HTTP::Date qw(time2iso str2time time2iso time2isoz); my $cv = AnyEvent->condvar; http_request GET => 'http://120.55.xx.6:3000/api/env?ip=192.168.32.101',timeout => 20, sub { my ($body, $hdr) = @_; $time2=time2iso(time()); print "$time2 is $time2 "; print "$body "; }; $time1=time2iso(time()); print "$time1 is $time1 "; print "11111111111111111111 "; $cv->recv(); jrhmpt01:/root/async# perl a6.pl $time1 is 2016-07-01 09:44:55 11111111111111111111 $time2 is 2016-07-01 09:45:05 ["","192.168.32.101 dr-mysql env-backup"] /**** 定义的接口10秒后返回: use DBI; my $dbName = 'oadb'; my $dbUser = 'query'; my $dbUserPass = 'xxxx'; my $dbh = DBI->connect("dbi:Oracle:$dbName", $dbUser, $dbUserPass) or die "can't connect to database " ; my $hostSql = qq{select IP,INFO,ENV from machine_info where IP='$ip' }; my ($a1, $a2, $a3,$a4,$a5,$a6,$a7,$a8,$a9); my @arr2=""; my $selStmt = $dbh->prepare($hostSql); $selStmt->bind_columns(undef, $a1, $a2, $a3); $selStmt->execute(); while( $selStmt->fetch() ){ push (@arr2, "$a1 $a2 $a3" ) }; sleep (10); $c->render(json => @arr2); }}; get '/api/bus' => sub { my $c = shift; my $bus= $c->param('bus'); my $flag=$c->param('flag'); if( ($bus) || ($flag) ) { /**** 如果接口返回超过超时时间设置呢?,接口返回时间设置为30s jrhmpt01:/root/async# cat a6.pl use AnyEvent::HTTP; use HTTP::Date qw(time2iso str2time time2iso time2isoz); my $cv = AnyEvent->condvar; http_request GET => 'http://120.55.118.6:3000/api/env?ip=192.168.32.101',timeout => 20, sub { my ($body, $hdr) = @_; $time2=time2iso(time()); print "$time2 is $time2 "; print "$body "; }; $time1=time2iso(time()); print "$time1 is $time1 "; print "11111111111111111111 "; $cv->recv(); jrhmpt01:/root/async# perl a6.pl $time1 is 2016-07-01 09:47:08 11111111111111111111 $time2 is 2016-07-01 09:47:28 异步请求超时,本身不会返回错误,需要自己手动打印