Модули Net::*, использующие LWP::UserAgent – зло?!
-
Upload
anatoly-sharifulin -
Category
Technology
-
view
1.356 -
download
1
description
Transcript of Модули Net::*, использующие LWP::UserAgent – зло?!
Модули Net::*, использующие
LWP::UserAgent – зло?!YAPC::Russia 2009Блиц-доклад
17 мая 2009 г.
YAPC Russia 200817 мая 2009 г.
CGI.pm – зло!?17 мая 2009 г.
Net::* и WWW::*
• Net::LastFM
• Net::LastFM::Submission
• Net::Twitter
• Net::FriendFeed
• WWW::Alexa::TrafficRank
17 мая 2009 г.
Net::* и WWW::*
• Net::LastFM
• Net::LastFM::Submission
• Net::Twitter
• Net::FriendFeed
• WWW::Alexa::TrafficRank
17 мая 2009 г.
Perl interface to the XXX API
17 мая 2009 г.
use LWP::UserAgent;
17 мая 2009 г.
Net::* и WWW::*my $submit = Net::LastFM::Submission->new( . . ., ua => LWP::UserAgent->new( agent => 'nls', timeout => 5, ),);
my $twitter = Net::Twitter->new( . . ., useragent_class => LWP::UserAgent->new(...),);
my $alexa = WWW::Alexa::Traffic->new(timeout => 5);
17 мая 2009 г.
Все хорошо, все работает!
17 мая 2009 г.
но...
17 мая 2009 г.
LWP::UserAgent – блокирующий
17 мая 2009 г.
LWP::UserAgent::POE – неблокирующий
17 мая 2009 г.
Не решает всех проблем :)
17 мая 2009 г.
Не решает всех проблем
• «Связывает» руки
• Невозможно использовать свой POE-клиент
• Хочу AnyEvent, IO::Lambda или что-то свое :)
17 мая 2009 г.
POE::Component::WWW::Alexa::TrafficRank
non-blocking wrapper around WWW::Alexa::TrafficRank
17 мая 2009 г.
use POE::Wheel::Run;Форкается :)
17 мая 2009 г.
НехорошоТ. к. нужно выполнить только блокирующий запрос
LWP::UserAgent
17 мая 2009 г.
Что же делать?
17 мая 2009 г.
POE::Component::TwitterСобственная реализация Twitter API,
не использует Net::Twitter
17 мая 2009 г.
НехорошоТ. к. не использует Net::Twitter
Клон!? :)
17 мая 2009 г.
Что же делать?
• Net::LastFM::Submission
• разделить механизм создания запроса и обработки ответа от посылки запроса и ожидания ответа
• решает все проблемы• очень легко!• гармонично :)
17 мая 2009 г.
Net::LastFM::Submission
• Создание запросов: HTTP::Request
• _request_handshake
• _request_now_playing
• _request_submit
• Обрабокта ответа: HTTP::Response
• _response
17 мая 2009 г.
Не использовать в этих методах
die / croak / confessРекомендация
17 мая 2009 г.
Net::LastFM::Submission no strict 'refs'; for my $m ('handshake', 'now_playing', 'submit') { *{$m} = sub { my $self = shift; my $r = $self->${\"_request_$m"}(@_); . . . my $data = $self->_response( $self->{'ua'}->request($r) ); . . . return $data; }; }
17 мая 2009 г.
POE::Component::Net::LastFM::Submission
non-blocking wrappertruelly asynchronously
17 мая 2009 г.
POE::Component::Net::LastFM::Submission
use POE::Component::Client::HTTP;также поддерживает возможность использовать
свой POE-клиет
17 мая 2009 г.
POE::Component::Net::LastFM::Submission(map { my $m = $_; $m => sub { my $request = $_[HEAP]->{'submit'} ->${\"_request_$m"}($_[ARG1]); . . . $_[KERNEL]->post( $_[HEAP]->{'client'} => 'request' => 'response', $request, ); };} 'handshake', 'now_playing', 'submit'),
17 мая 2009 г.
Net::LastFM::SubmissionP::C::N::LastFM::Submission
http://github.com/sharifulin/net-lastfm-submission
17 мая 2009 г.
Net::LastFMP::C::Net::LastFM
http://github.com/sharifulin/net-lastfm
17 мая 2009 г.
Модули Net::*, использующие тупо
LWP::UserAgent – зло!
17 мая 2009 г.
Net::FriendFeedКаппа, я тебя убедил?
Внесешь изменения в свой модуль? :)
17 мая 2009 г.
use Perlor die
17 мая 2009 г.
JFDI
17 мая 2009 г.
Спасибо за внимание!Анатолий Шарифулин
RostovOnDon.pm
17 мая 2009 г.