AnyEvent-Google-PageRank
view release on metacpan or search on metacpan
rank_get 'http://perlmonks.org', host => "$host:$port", sub {
my ($rank, $headers) = @_;
is($rank, 8, 'perlmonks.org rank');
ok(time()-$start > 5, 'perlmonks.org non-blocking');
$cv->end;
};
AnyEvent::Google::PageRank->new(host => "$host:$port")->get(
'http://cpan.org',
sub {
my ($rank, $headers) = @_;
is($rank, 7, 'cpan.org rank');
ok(time()-$start < 5, 'cpan.org non-blocking');
$cv->end;
}
);
$cv->recv;
kill 15, $pid;
done_testing();
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
sub make_rank_server {
my %table = @_;
my $serv = IO::Socket::INET->new(Listen => 3)
or die $@;
my $child = fork();
die 'fork: ', $! unless defined $child;
if ($child == 0) {
while (1) {
my $client = $serv->accept()
or next;
my $child = fork();
die 'subfork: ', $! unless defined $child;
if ($child == 0) {
my $headers;
while (1) {
$client->sysread($headers, 1024, length $headers)
or last;
if (rindex($headers, "\015\012\015\012") != -1) {
last;
}
}
my ($path) = $headers =~ /GET\s+(\S+)/
or exit;
$path =~ /ch=([^&]+)/
or exit;
my ($url) = $path =~ /info:(.+)/
or exit;
$url = uri_unescape($url);
my $response;
if (exists $table{$url}) {
$response = $table{$url}[0];
sleep $table{$url}[1];
}
else {
$response = 'xxx';
}
$client->syswrite(
join(
"\015\012",
"HTTP/1.1 200 OK",
"Connection: close",
"Content-Type: text/html",
"\015\012"
) . "Rank_321:123:$response"
);
exit;
}
}
exit;
}
return ($child, $serv->sockhost eq "0.0.0.0" ? "127.0.0.1" : $serv->sockhost, $serv->sockport);
}
( run in 2.335 seconds using v1.01-cache-2.11-cpan-e93a5daba3e )