以前の質問の回答からのタイムアウトに Sys::SigAction timeout_call を使用した後(注: 今回は WWW::Mechanize::Timed の代わりに WWW::Mechanize を使用しています)、60 秒のタイムアウト アラームが正しく機能していました。しばらくの間、私は SSL に Crypt::SSLeay (Net::SSL) を使用していると思っていましたが、よく見てみると、何らかの理由でコードが Net::SSLeay (IO::Socket::SSL) を使用していることに気付きました。 WWW::Mechanize は自動的に Crypt::SSLeay を使用すると思いました。Net::SSL の使用を開始してから、SSL ページの応答時間が改善されていることに気付きました (50% 高速化)。しかし、60 秒のタイムアウトが失敗し、実行が再び 60 秒を超えました! Net::SSL を使用すると、Sys::SigAction タイムアウト (timeout_call) は機能しますが、SSL ページはすぐにはロードされません。そこで、質問が 2 つあります。
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 を使用してロードされたモジュール -
クリプト/SSLeay/CTX.pm
クリプト/SSLeay/X509.pm
クリプト/SSLeay.pm
ネット/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