3

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です.使用法を示す簡単な例はありますか?

4

2 に答える 2

6

問題は、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;
于 2014-04-02T12:47:21.173 に答える