AnyEvent-Curl-Multi
view release on metacpan or search on metacpan
lib/AnyEvent/Curl/Multi.pm view on Meta::CPAN
package AnyEvent::Curl::Multi;
use common::sense;
use base 'Object::Event';
use Carp qw(croak);
use AnyEvent;
use WWW::Curl 4.14;
use WWW::Curl::Easy;
use WWW::Curl::Multi;
use Scalar::Util qw(refaddr);
use HTTP::Response;
our $VERSION = '1.1';
# Test whether subsecond timeouts are supported.
eval { CURLOPT_TIMEOUT_MS(); }; my $MS_TIMEOUT_SUPPORTED = $@ ? 0 : 1;
=head1 NAME
AnyEvent::Curl::Multi - a fast event-driven HTTP client
=head1 SYNOPSIS
use AnyEvent;
use AnyEvent::Curl::Multi;
my $client = AnyEvent::Curl::Multi->new;
$client->max_concurrency(10);
# Method 1: Object::Event pattern
#
# Schedule callbacks to be fired when a response is received,
# or when an error occurs.
$client->reg_cb(response => sub {
my ($client, $request, $response, $stats) = @_;
# $response is an HTTP::Request object
});
$client->reg_cb(error => sub {
my ($client, $request, $errmsg, $stats) = @_;
# ...
});
my $request = HTTP::Request->new(...);
$client->request($request);
# Method 2: AnyEvent::CondVar pattern
# Do not use this pattern in an existing event loop!
my $handle = $client->request($request);
eval {
my ($response, $stats) = $handle->cv->recv;
# $response is an HTTP::Request object
# ...
};
if ($@) {
my $errmsg = $@;
# ...
}
=head1 DESCRIPTION
This module is an AnyEvent user; you must use and run a supported event loop.
AnyEvent::Curl::Multi is an asynchronous, event-driven HTTP client. You can
use it to make multiple HTTP requests in parallel using a single process. It
uses libcurl for fast performance.
=head2 Initializing the client
my $client = AnyEvent::Curl::Multi->new;
You can specify the maximum number of concurrent requests by setting
C<max_concurrency>, e.g.:
my $client = AnyEvent::Curl::Multi->new(max_concurrency => 10);
You can also set the maximum concurrency after the client has been created:
$client->max_concurrency(10);
A value of 0 means no limit will be imposed.
You can also set global default behaviors for requests:
=over
=item timeout => PERIOD
Specifies a timeout for each request. If your WWW::Curl is linked against
libcurl 7.16.2 or later, this value can be specified in fractional seconds (ms
resolution). Otherwise, the value must be specified in whole seconds.
=item proxy => HOST[:PORT]
( run in 0.747 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )