1

以前の質問の回答からのタイムアウトに 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 つあります。

  1. Crypt::SSLeay (Net::SSL) は、Net::SSLeay (IO::Socket:SSL) よりも高速な SSL アルゴリズムを提供しますか?

  2. 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

4

0 に答える 0