地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Perl】AnyEvent::HTTPでhttpリクエストを投げてみるサンプル

metacpan.org

perlで何も考えずにLWPとかでhttpリクエストをたくさん投げると取得すべきURLリストの中にレスポンスの遅いサイトが存在した場合そのリクエストの待ちが発生し後続のリクエストも遅くなります。

httpを簡単にノンブロッキングで実行してくれるライブラリ。複数サイトへ一括リクエストを投げたい場合はpreforkよりも優れたパフォーマンスで実行できる。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

use AnyEvent;
use AnyEvent::HTTP;
use Encode;
use XML::Simple;

my @uri_list = qw{
    https://www.google.com
};

my $cv = AnyEvent->condvar;
for my $uri (@uri_list) {
    print "HTTP Request => $uri";
    $cv->begin;
    my $guard; $guard = http_get $uri => sub {
        my ($body, $header) = @_;
        undef $guard;
        print($body);
        # print encode_utf8($res->{channel}->{item}->[0]->{title});
        $cv->end;
    };
}
$cv->recv;