3

任何事件::HTTP

在 Debian 和 Centos 上尝试过,都使用 perl 5.10

之后没有声音

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

模块是否存在根本性的问题,或者我是否需要更新的 perl 版本,尽管我希望对此有所抱怨?

编辑

所以我需要事件循环,有没有一些简单的例子可以展示AE::HTTP用法?

4

2 回答 2

6

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

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

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

在这种情况下,我已经编写了它,以便回调也send对条件变量执行 a,这会导致程序结束其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;
于 2014-04-02T12:47:21.173 回答
1

您可能需要进一步阅读,而不是停留在第一个不完整的示例上。描述中的第一句话是:

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

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

于 2014-04-02T11:25:21.840 回答