2012-04-05 3 views
0

私は、複数の送信IPアドレスでthreadsHTTP::Asyncを使用するPerlコード>>PerlでHTTP :: Async通信を記録するにはどうしたらいいですか? <strong>URL</strong>と<strong>アウトバウンドIP</strong>情報が含まれるであろう、私はいくつかの基本的なアプリケーションに<strong>ログ</strong>を生成する必要が

use threads ('yield', 
       'exit' => 'threads_only', 
       'stack_size' => 2*16384); 
use strict; 
use warnings; 
no warnings 'threads'; 
use threads::shared; 
use LWP::UserAgent; 
use HTTP::Request; 
use HTTP::Async; 
... 
my $async = HTTP::Async->new(...); 
... 
foreach (@list) { 
    $thread = threads->create(sub { 
    local $SIG{KILL} = sub { threads->exit }; 
    ... 
    $ua->local_address($ip); 
    $request->url($url); 
    $async->add($request); 
    while ($response = $async->wait_for_next_response) { 
     ... 
    } 
    }, $_); 
} 
... 

を持っています。

HTTP::Asyncはどのようにして通信できますか?

+1

さて、スレッドなしで*どのように記録されますか?おそらく最初は正しくないかもしれませんが、それはスタートです。それから、スレッドとそれがLWPやIOの中に存在する可能性があるものを含めて、共有可能な可変状態に与える影響を理解するだけです。つまり、質問/投稿のほとんどは無関係であり、蒸留することができます。 –

+0

ご要望と回答があります。ログに記録し、どこかに保存するデータを抽出します。どの部分があなたを抱きしめていますか? –

+0

@briandfoy - 何らかの理由で、いくつかのリクエストが不正な送信IPアドレスで外出することがあるので、**ロギング**は私を助けます。 –

答えて

2

あなたは実際にそのコードでLWPを使用していません。ただロードしているだけです。同様に、コード例から、なぜスレッドを使用しているのか明らかではありません。 HTTP :: Asyncは複数のHTTPリクエストを「一度に」処理します。

HTTP::Asyncには組み込みのデバッグメカニズムがありませんが、そのモジュールに 'デバッグ'フラグを追加するのは比較的簡単で、一部の警告文は適切な場所に追加すると役立ちますそれはやっている。 HTTP :: Asyncを使用している独自のコードにデバッグコードを追加することもできます。

+0

ありがとうございます。あなたの答えに基づいて質問の件名を編集したので、 "どうすればPerlでHTTP :: Async通信をログに記録できますか?"というメッセージが表示されます。 –

関連する問題

 関連する問題