2009-02-24 7 views
5

मुझे पर्ल में कुछ समवर्ती एक्सएमएल फ़ीड अनुरोध करने की आवश्यकता है। यह करने के लिए सबसे तेज़ तरीका क्या है?पर्ल में समवर्ती वेब अनुरोध करने का सबसे तेज़ तरीका क्या है?

+4

क्या आपका सबसे तेज़ मतलब है: एक समाधान जो कार्यान्वित करने के लिए सबसे तेज़ होगा, या एक समाधान जो लागू होने के बाद सबसे तेज़ होगा? – Marcus

उत्तर

10

मैं शायद शायद इस तरह AnyEvent का उपयोग करेंगे:

use AnyEvent; 
use AnyEvent::HTTP; 


sub get_feeds { 
    my @feeds = @_; 
    my $done = AnyEvent->condvar; 
    my %results; 
    $done->begin(sub { $done->send(\%results) }); 

    for my $feed (@feeds){ 
     $done->begin; 
     http_get $feed, sub { $results{$feed} = \@_; $done->end }; 
    } 

    $done->end; 
    return $done; 
} 

my $done = get_feeds(...); 
my $result = $done->recv; # block until all feeds are fetched 
+1

AnyEvent :: HTTP का लिंक http://search.cpan.org/~mlehmann/AnyEvent-HTTP/ है। – gpojd

3

मैं कुछ इसी तरह के लिए LWP::Parallel::UserAgent इस्तेमाल किया। पॉड से एक उदाहरण:

require LWP::Parallel::UserAgent; 
$ua = LWP::Parallel::UserAgent->new(); 
... 

$ua->redirect (0); # prevents automatic following of redirects 
$ua->max_hosts(5); # sets maximum number of locations accessed in parallel 
$ua->max_req (5); # sets maximum number of parallel requests per host 
... 
$ua->register ($request); # or 
$ua->register ($request, '/tmp/sss'); # or 
$ua->register ($request, \&callback, 4096); 
... 
$ua->wait ($timeout); 
... 
sub callback { my($data, $response, $protocol) = @_; .... } 
+0

एलडब्लूपी :: हालांकि, इस समय समानांतर अपने परीक्षणों में विफल रहता है। –

+0

मुझे लगता है कि यह अब बनाए रखा नहीं है। मैंने AnyEvent :: HTTP का उपयोग करने के लिए अपने सभी काम को स्थानांतरित कर दिया। – gpojd

3

HTTP::Async बहुत तेजी से और कोड के लिए काफी आसान है।

+1

महत्वपूर्ण रूप से, यह HTTP :: प्रतिक्रिया ऑब्जेक्ट देता है, ताकि आप इसे एलडब्लूपी के स्थान पर लगभग दर्द रहित तरीके से स्लॉट कर सकें। –

4

दरअसल, AnyEvent::Curl::Multi libcurl के शीर्ष पर निर्मित एक गैर-अवरुद्ध लाइब्रेरी है। बहुत तेज़ और समेकन उपलब्ध है। AnyEvent :: HTTP, IMO से अधिक शक्तिशाली।

संबंधित मुद्दे

 संबंधित मुद्दे