使用Sys :: SigAction timeout_call从我之前的 question 中的答案中超时(注意:这次我使用的是WWW :: Mechanize而不是WWW :: Mechanize :: Timed ) 我的60秒超时警报正常工作。有一段时间我以为我正在使用Crypt :: SSLeay(Net :: SSL)进行SSL,但仔细观察之后我意识到代码是使用Net :: SSLeay(IO :: Socket :: SSL),由于某种原因我以为WWW :: Mechanize会自动使用Crypt :: SSLeay。在我开始使用Net :: SSL之后,我注意到SSL页面的响应时间有所改善(快了50%)。但现在我的60秒超时失败并且再次超过60秒!如果我取出使用Net :: SSL,那么我的Sys :: SigAction超时(timeout_call)将起作用,但SSL页面加载速度不快。所以我有两个问题。
Crypt :: SSLeay(Net :: SSL)提供比Net :: SSLeay(IO :: Socket:SSL)更快的SSL算法吗?
如何使用Net :: SSL让我的超时时间再次运行? (也许这是我必须决定的权衡?)
代码:
use Net::SSL
use WWW::Mechanize;
use HTTP::Cookies;
use Sys::SigAction qw(timeout_call);
use Time::HiRes qw(time); #also for use with sigaction?
my ($start_time, $end_time) = 0;
my $ua = WWW::Mechanize->new(
autocheck => 0, #turning off autocheck becuase any get errors will be fatal need to check for errors ourselves
ssl_opts => { verify_hostname => 0 } # if not set to 0 then Crypt::SSLeay will complain that it cant resolve hostnames
);
my $cookies = HTTP::Cookies->new(
autosave => 1
);
$ua->cookie_jar($cookies);
$ua->agent_alias("Windows IE 6");
if ( timeout_call( 60 ,sub { $start_time = time(); $ua->get('https://secure.site.com'); $end_time = time();} ))
{
print "index page timed out\n" ;
exit;
}
my $total_index_time = sprintf '%.3f', ($end_time - $start_time);
print "index load time: $total_index_time\n";
unless($ua->success){
print "Error: " . $ua->status;
exit;
}
...
使用Net :: SSL - 加载的 模块
Crypt / SSLeay / CTX.pm Crypt / SSLeay / X509.pm Crypt / SSLeay.pm Net / SSL.pm 隐窝/ SSLeay的/ MainContext.pm 模块加载而不使用Net :: SSL - 净/ SSLeay.pm IO /插座/ SSL.pm /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/Net/SSLeay/randomize.al /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi/auto/Net/SSLeay/autosplit.ix