重用LWP:UserAgent?

时间:2014-04-02 17:52:27

标签: perl http tcp lwp

如何在perl中最佳地使用LWP :: UserAgent?
如果我需要进行几次http调用,我会重用同一个对象吗? 例如。

my $browser = LWP::UserAgent->new;    
foreach my $url (@urls) {  
   my $response = $browser->get( $url );  
   # process response  
}

foreach my $url (@urls) {  
   my $browser = LWP::UserAgent->new;    
   my $response = $browser->get( $url );  
   # process response  
}

在我看来,第二个版本是低效的,因为它每次都会重新打开连接?我应该注意哪些问题?

1 个答案:

答案 0 :(得分:2)

正如Miller评论的那样,您的两个代码示例在效率方面并没有太大差异。对于每次循环迭代,两者都将通过新连接发送新的GET请求,这比创建对象的成本更重要。

您可以使用 experimental 模块LWP::ConnCache缓存连接:

use LWP::ConnCache;
use LWP::UserAgent;

my $cache = LWP::ConnCache->new;
$cache->total_capacity(10); # Cache up to 10 connections

my $ua = LWP::UserAgent->new(conn_cache => $cache);
# Alternatively, my $ua = LWP::UserAgent->new(keep_alive => 10);

$ua->get('http://www.google.com');
$ua->get('http://www.google.com'); # Should reuse cached connection

请注意,您可以在多个LWP::ConnCache中使用相同的LWP::UserAgent对象。