zoukankan      html  css  js  c++  java
  • 异步和同步http请求超时机制

    异步超时设置:
    
    例子:
    Example: do a simple HTTP GET request for http://www.nethype.de/ and print the response body.
    
       http_request GET => "http://www.nethype.de/", sub {
          my ($body, $hdr) = @_;
          print "$body
    ";
       };
       
     The callback will be called with the response body data as first argument (or undef if an error occurred)
    
    回调会被调用第一个参数是响应的内容,如果错误发生就是undef
     
    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', 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# 
    
    jrhmpt01:/root/async# perl a6.pl 
    $time1 is 2016-04-22 09:34:49
    11111111111111111111
    $time2 is 2016-04-22 09:35:19
    ["","192.168.32.101  dr-mysql  env-backup"]
    
    
    
    timeout => $seconds
    The time-out to use for various stages - each connect attempt will reset the timeout, as will read or write activity, i.e. this is not an overall timeout.
    
    Default timeout is 5 minutes.
    
    
    time-out 使用于各个阶段,每个连接尝试重置timeout,会读或者写,即这不是整体的超时时间
    
    默认是5分钟
    
    //异步超时例子:
    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-04-22 09:41:48
    11111111111111111111
    $time2 is 2016-04-22 09:42:08
    
    
    //同步超时例子:
    
    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
    ";
    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
    ";
    print "111111111111111111111111111111111111
    ";
    jrhmpt01:/root/async# perl a1.pl 
    $time1 is 2016-04-22 09:51:56
    500 read timeout
    $time2 is 2016-04-22 09:52:06
    111111111111111111111111111111111111
    
    $ua->timeout( $secs )
    Get/set the timeout value in seconds. The default timeout() value is 180 seconds, i.e. 3 minutes.
    
    The requests is aborted if no activity on the connection to the server is observed for timeout seconds. This means that the time it takes for the complete transaction and the request() method to actually return might be longer.
    
    同步情况下,  设置timeout 值为秒, 默认超时时间是180秒 3分钟
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗?
    当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗
    重写后的方法与被重写的方法的返回值一样吗?
    java中,一个类实现某个接口,必须重写接口中的所有方法吗
    java方法重写返回值类型
    field
    JAVA父类引用指向子类的对象意思
    io模型
    操作系统面试题整理
    java并发问题
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350847.html
Copyright © 2011-2022 走看看