AnyEvent :: HTTP基本示例不起作用

时间:2014-04-02 10:48:43

标签: perl anyevent

AnyEvent::HTTP

使用perl 5.10

尝试使用Debian和Centos

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

是否存在基本上与模块有关的问题,或者我是否需要更新的perl版本,尽管我会期待有关它的投诉?

编辑

所以我需要事件循环,是否有一些简单的例子可以证明AE::HTTP用法?

2 个答案:

答案 0 :(得分:5)

问题是sleep不是AnyEvent的一部分,不执行允许AnyEvent :: HTTP异步获取的事件循环。当您阻止时,您希望阻止使用AE感知的东西,例如条件变量。

该程序创建一个名为$exit_wait的条件变量,然后发出HTTP请求。在提出请求并收到响应时,程序可以继续运行。

一旦程序到达需要来自HTTP请求的信息的点,它就会在条件变量上调用recv。这允许在HTTP请求也完成时触发回调。它只是转储$headers哈希。

在这种情况下,我编写了它,以便回调也对条件变量执行send,这会导致程序结束其recv调用并继续。没有它,程序将处于无休止的等待状态。

如果不了解更多有关您申请的信息,我无法帮助您。

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;

答案 1 :(得分:1)

您可能需要阅读比在第一个不完整的示例处停止更多的内容。 描述中的第一句是:

  

此模块是AnyEvent用户,您需要确保使用   并运行支持的事件循环。

有关AnyEvent *基本用法的文档(例如事件循环等),请参阅AnyEvent文档。