Skip to content

Instantly share code, notes, and snippets.

@savonarola
Forked from averyanov/gist:320557
Created March 3, 2010 12:03
Show Gist options
  • Save savonarola/320562 to your computer and use it in GitHub Desktop.
Save savonarola/320562 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl -w
use strict;
use AnyEvent::HTTP;
use Time::HiRes qw/time/;
use constant LOGGER_INTERVAL => 1;
use constant USAGE => "$0 [requests_count] [threads_count] [url]\n";
my ( $max_requests, $max_threads, $url ) = @ARGV;
die USAGE unless $max_requests && $max_threads && $url;
my $requests_count = 0;
my $cv = AnyEvent->condvar();
sub test
{
my $url = shift;
my $req_id = $requests_count ++;
print "$req_id - request\n";
http_get $url, sub{
print "$req_id - response\n";
$requests_count < $max_requests ? test($url) : $cv->send();
};
}
my $global_begin_time = time();
my $logger = AnyEvent->timer(
interval => LOGGER_INTERVAL,
cb => sub {
my $time = time() - $global_begin_time;
print sprintf("Time passed: %f,\trequests: %d of %d\n", $time, $requests_count, $max_requests);
},
);
test($url) for (1..$max_threads);
$cv->recv();
my $global_end_time = time();
print sprintf("Total time: %f\n", $global_end_time-$global_begin_time);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment