Pregunta

AnyEvent::HTTP

Tried on Debian and Centos, both with perl 5.10

Not a sound after

perl -Mstrict -we 'use AnyEvent::HTTP; http_get "http://www.nethype.de/", sub { print $_[1] }; sleep 20'

Is there something fundamentally broken with module, or do I need more recent perl version, although I would expect complaints about it?

EDIT:

So I need event loop, is there some simple example which would demonstrate AE::HTTP usage?

¿Fue útil?

Solución

The problem is that sleep, not being part of AnyEvent, doesn't execute the event loop that permits AnyEvent::HTTP to fetch asynchronously. When you block, you want to block using something AE-aware such as a condition variable.

This program creates a condition variable called $exit_wait and then makes the HTTP request. The program can continue running while the request is made and the response received.

Once the program has reached a point where it needs the information from the HTTP request, it calls recv on the condition variable. This allows the callback to trigger when the HTTP request has also completed. All it does is dump the $headers hash.

In this case I have written it so that the callback also does a send on the condition variable, which causes the program to end its recv call and continue on. Without it the program will be left in an endless wait state.

I can't help further without knowing more about your application.

use strict;
use warnings;

use AnyEvent::HTTP;
use Data::Dump;

STDOUT->autoflush;

my $exit_wait = AnyEvent->condvar;

my $handle = http_request
  GET => 'http://www.nethype.de/',
  sub {
    my ($body, $headers) = @_;
    dd $headers;
    $exit_wait->send;
  };

# Do stuff here

$exit_wait->recv;

Otros consejos

You might need to read a bit further than stopping at the first incomplete example. The first sentence in the description is:

This module is an AnyEvent user, you need to make sure that you use and run a supported event loop.

For documentation about the basic usage of AnyEvent* (e.g. event loops etc) see the AnyEvent documentation.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top