Skip to content

Instantly share code, notes, and snippets.

@dayfuaim
Created November 2, 2015 17:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dayfuaim/3431867996b61817b3e0 to your computer and use it in GitHub Desktop.
Save dayfuaim/3431867996b61817b3e0 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl -w
#
use strict;
use feature ':5.10';
use utf8;
use open qw(:std :utf8);
use DDP;
use Term::ANSIColor qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
use Time::HiRes qw(gettimeofday tv_interval);
use AnyEvent;
use AnyEvent::HTTP;
my $cv = AnyEvent->condvar;
$|++;
my @u = @ARGV;
unless (scalar @u) {
die RED "Give some URLs to my STDIN."
}
my $time_in = [ gettimeofday ];
my @r;
my $cnt = 0;
foreach my $url (@u) {
say "GET $url";
my $guard;
$guard = http_get($url,
sub {
undef $guard;
my ($body, $hdr) = @_;
$cnt++;
if ($hdr->{Status} =~ /^2/) {
print GREEN "$url: "
} else {
print RED "$url: "
}
say $hdr->{Status};
push @r => [$url, tv_interval($time_in)];
$cv->send() if $cnt==scalar @u
}
)
}
$cv->recv;
@r = sort { $b->[1] <=> $a->[1] } @r;
p(@r);
exit;
@dayfuaim
Copy link
Author

dayfuaim commented Nov 2, 2015

Консольное приложение на базе фреймворка AnyEvent которое принимает список URL'ов на STDIN и вызывает их все сразу в неблокирующем режиме, выводя на экран полученные ответы по мере их получения и статистику по скорости вызова каждого урла после завершения всех вызовов.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment