Истинный тайм-аут на LWP:: метод запроса UserAgent

Недавно я написал модуль под названием keysight , который переводит события keypress, keydown и keyup в символы и клавиши соответственно.

Пример:

 element.addEventListener("keydown", function(event) {
    var character = keysight(event).char
 })

12
задан xenoterracide 9 August 2010 в 05:33
поделиться

3 ответа

Вы могли бы попробовать LWPx:: ParanoidAgent, подкласс LWP:: UserAgent, который более осторожен относительно того, как он взаимодействует с удаленными веб-серверами.

Среди прочего это позволяет Вам указывать глобальный тайм-аут. Это было разработано Brad Fitzpatrick как часть проекта LiveJournal.

12
ответ дан 2 December 2019 в 21:25
поделиться

Из того, что я понимаю, свойство тайм-аута не принимает во внимание тайм-ауты DNS. Возможно, что Вы могли сделать поиск DNS отдельно, затем выполнить запрос к серверу, если это работает с корректным набором значений тайм-аута для useragent.

Действительно ли это - проблема DNS с сервером или чем-то еще?

Править: Это могла также быть проблема с IO:: Сокет. Попытайтесь обновить свой IO:: модуль Сокета, и видит, помогает ли это. Я вполне уверен была ошибка там, которая предотвращала LWP:: тайм-ауты UserAgent от работы.

Alex

0
ответ дан 2 December 2019 в 21:25
поделиться

Можно сделать собственный тайм-аут как это:

use LWP::UserAgent;
use IO::Pipe;

my $agent = new LWP::UserAgent;

my $finished = 0;
my $timeout = 5;

$SIG{CHLD} = sub { wait, $finished = 1 };

my $pipe = new IO::Pipe;
my $pid = fork;

if($pid == 0) {
    $pipe->writer;
    my $response = $agent->get("http://stackoverflow.com/");
    $pipe->print($response->content);
    exit;
}

$pipe->reader;

sleep($timeout);

if($finished) {
    print "Finished!\n";
    my $content = join('', $pipe->getlines);
}   
else {
    kill(9, $pid);
    print "Timed out.\n";
}   
1
ответ дан 2 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: