AnyEvent::HTTP 实现异步请求

异步http:

jrhmpt01:/root/async# cat a1.pl 
use  LWP::UserAgent;
use utf8;
use DBI;
use POSIX;
use HTTP::Date qw(time2iso str2time time2iso time2isoz);
use Data::Dumper;
use HTML::TreeBuilder;
  use HTML::TreeBuilder::XPath;
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
$ua->agent("Mozilla/8.0");
#my $response = $ua->get('http://data.10jqka.com.cn/financial/yjyg/date/2016-03-31/board/ALL/field/enddate/order/desc/page/1/ajax/1/');
#my $response = $ua->get('http://data.10jqka.com.cn/financial/yjyg/');

$time1=time2iso(time());
print "\$time1 is $time1\n";
my $response = $ua->get('http://120.55.118.6:3000/api/env?ip=192.168.32.101');
if ($response->is_success) {
print   $response->decoded_content;  # or whatever
}else{print   $response->decoded_content; };
$time2=time2iso(time());
print "\$time2 is $time2\n";
print "111111111111111111111111111111111111\n";
jrhmpt01:/root/async# 
jrhmpt01:/root/async# 


jrhmpt01:/root/async# perl a1.pl 
$time1 is 2016-04-16 18:25:47
500 read timeout
$time2 is 2016-04-16 18:25:57
111111111111111111111111111111111111


堵塞直到超时,此时不能干任何事情,需要异步请求来处理!


jrhmpt01:/root/async# cat a3.pl 
#!/usr/bin/perl

use AnyEvent;
use AnyEvent::HTTP;


my $cv = AnyEvent->condvar;

sub doit{
    my $url = shift ;
    return if not defined $url;

    $cv->begin;
    http_get( "$url", sub { done( $url, @_ ) } );
    print "1111111111111111\n";
}

sub done {
    my ($url, $content, $hdr) = @_;

    $cv->end();
    print "Search: $url\tStatus: ", $hdr->{Status}, "\n";
    print "\$content is $content\n";
};
&doit('http://120.55.118.6:3000/api/env?ip=192.168.32.101'); 
    print "222222222222222222\n";
$cv->recv();
jrhmpt01:/root/async# perl a3.pl 
1111111111111111
222222222222222222
Search: http://120.55.118.6:3000/api/env?ip=192.168.32.101	Status: 200
$content is ["","192.168.32.101  dr-mysql  env-backup"]


利用AnyEvent::HTTP 实现异步请求

posted @ 2016-04-16 20:46  czcb  阅读(294)  评论(0编辑  收藏  举报