NAME

MR::AsyncHTTP - A zero-overhead Perl module for requesting HTTP in async manner, without event pools

SYNOPSIS

use MR::AsyncHTTP;
my $asynchttp = new MR::AsyncHTTP( connect_timeout=>0.6 );

# Send a request, dont wait answer right now
my $req_id = $asynchttp->send_get( "http://example.com/" );

#..work with something else..
my $res = $asynchttp->check_response($req_id);
if( !$res ) {
  # Not ready yet, work on something other
}

#..Finally, wait it.
my $res = $asynchttp->wait($req_id);

#..Send a couple of requests
for(1..5) {
  $asynchttp->send_get( "http://example.com/request/".$_ );
}

#Dedicate some time for sysread() to free buffers
$asynchttp->poke;

# Wait all responses
$asynchttp->wait_all;

DESCRIPTION

Note this module have limited functionality compared to say, LWP. Its designed to make simple requests async, thats all.

new(%opts)

Captain: create a new object.

%opts can be:

resolve_timeout

Timeout for gethostbyname(). Default is 0.5 second. 0 to point no timeout.

resolve_cache

Enable caching result of gethostbyname(). A false means no resolve cache. 'local' means object-scope cache. Other true values mean global cache between instances.

Default is 1 (global).

connect_timeout

Set timeout for socket connect(). Default is 0.2 second. 0 to point no timeout.

response_timeout

Set timeout for response, not including connect. Affect wait() and wait_all() so they wont block like forever. Default is 1 second.

send_get(url, headers)

Send HTTP GET on given url. headers is a hash field=>value

Returns ID of request. Or undef on fail (sets $@ variable); 0 on timeout

check_response(req_id)

Nonblocking check for response. Returns respnse hash when response is complete.

wait(req_id)

Wait for response upto response_timeout. Returns response hash or 0 if timeout.

poke()

Dedicate some time for sysread() to free system buffers.

Returns number of requests ready for processing in scalar context or list of ready ids in list context.

wait_all()

Blocking wait for all responses. Returns undef.

BUGS / CAVEATS

Limited functionality. Does not support nonstandard ports yet. Does not suport SSL yet.

Module massively rely on Time::HiRes::ualarm. So it uses ALRM signal. So do not wrap it with alarm() or ualarm().

AUTHOR

Alt, <alt@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2012 by Alt

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.14.2 or, at your option, any later version of Perl 5 you may have available.