Недавно я написал модуль под названием keysight , который переводит события keypress
, keydown
и keyup
в символы и клавиши соответственно.
Пример:
element.addEventListener("keydown", function(event) {
var character = keysight(event).char
})
Вы могли бы попробовать LWPx:: ParanoidAgent, подкласс LWP:: UserAgent, который более осторожен относительно того, как он взаимодействует с удаленными веб-серверами.
Среди прочего это позволяет Вам указывать глобальный тайм-аут. Это было разработано Brad Fitzpatrick как часть проекта LiveJournal.
Из того, что я понимаю, свойство тайм-аута не принимает во внимание тайм-ауты DNS. Возможно, что Вы могли сделать поиск DNS отдельно, затем выполнить запрос к серверу, если это работает с корректным набором значений тайм-аута для useragent.
Действительно ли это - проблема DNS с сервером или чем-то еще?
Править: Это могла также быть проблема с IO:: Сокет. Попытайтесь обновить свой IO:: модуль Сокета, и видит, помогает ли это. Я вполне уверен была ошибка там, которая предотвращала LWP:: тайм-ауты UserAgent от работы.
Alex
Можно сделать собственный тайм-аут как это:
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";
}