LINUX.ORG.RU

HTTP-клиент, возвращающий детальные тайминги?

 , ,


0

3

Нужен HTTP-клиент для движка веб-тестирования.

Сейчас пользуюсь Mojo::UserAgent - для базовых вещей адекватный и настраиваемый вполне (плюс груда пока не слишком нужного функционала).

Но вот захотелось снимать метрику «время DNS-ответа». Можно конечно и отдельно резолвить DNS, потом ещё раз то же самое, но уже из Mojo::UserAgent... Но зачем, это же время теста всё-таки, лишняя нагрузка, потенциальные дополнительные источники багов в самом движке тестирования.

Сам HTTP-клиент, очевидно, может узнать, сколько у него времени отнял DNS-резолвинг. Я порылся в безумной иерархии Mojo-классов - не нашёл ничего вообще связанного с таймингами (в response).

Может быть, плохо смотрел? Может быть, есть какой-то более подходящий для веб-тестов перловый HTTP-клиент?

Возможный вариант ответа: https://metacpan.org/pod/WWW::Mechanize::Timed

НО: про DNS ни слова. Время client_connect и время резолвинга всё-таки хоть и коррелируют, но это сильно не одно и то же.

★★★★★

Последнее исправление: DRVTiny (всего исправлений: 1)

А зачем это тестировать? Есть возможность повлиять на время днс-резолвинга? Речь же не о резолвинге своего домена?

Wizard_ ★★★★★
()
Ответ на: комментарий от Wizard_

Чтобы понять, на каком этапе возникает проблема. Сейчас на общее время загрузки веб-страницы есть триггер, но когда он срабатывает - сказать что-то определённое по сути невозможно, нужно понимать, из чего время загрузки складывается. В одном определённом случае удалось понять, например, что проблема была вообще не на стороне веб- приложения, а на стороне DNS. Если тупит веб-приложение - меры, которые следует предпринимать для того, чтобы разрешить ситуацию, существенно отличаются от тех мер, которые необходимо предпринять в том случае, когда сбоит dns-резолвинг.

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от DRVTiny

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

DELIRIUM ☆☆☆☆☆
()

в 1998м, там, где Perl, любой HTTP запрос занимает минуту ±15 секунд. нет смысла это мерять.

anonymous
()

Сам HTTP-клиент, очевидно, может узнать, сколько у него времени отнял DNS-резолвинг.

ничего не знаю про перл, но gethostbyname, очевидно, делает не HTTP клиент, а штука, которую обычно называют dns resolver
как оно реализовано у тебя, опять таки хз, может это библиотека на сях. но технически, время между попыткой открытия tcp сокета и получением первого байта можно считать резолвом +- хендшейки, т.е. это нужно лезть на уровень IO или брать логи с самого dns resolver.
а по ссылке супер высокоуровневый API.

system-root ★★★★★
()
Ответ на: комментарий от disarmer

Да, и правда есть продвинутый http-клиент на базе libcurl, это Net::Curl::Easy : https://metacpan.org/pod/Net::Curl::Easy У этого класса есть метод getinfo, который и позволяет получить всё то же, что возможно и в https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html Ибо просто интерфейс. В общем, да, cURL уделать ещё никому не удавалось...

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от annulen

По-моему как минимум не хуже, но при этом Net::Curl обновлялся 9.09.2017-го :

use Net::Curl::Easy qw(/^CURLOPT_/ /^CURLINFO_/);;

my $easy = Net::Curl::Easy->new();
$easy->setopt( CURLOPT_URL, "https://linux.org.ru/" );
$easy->setopt( CURLOPT_WRITEDATA, \my $ans );
$easy->perform();
say 'Name lookup takes '.$easy->getinfo( CURLINFO_NAMELOOKUP_TIME );

У меня что-то от 0.012 с копейками до 0.03 время резолвинга на разных сайтах рунета.

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от DRVTiny

Сравнил со временем Net::DNS::Resolver'а - последнее гораздо менее стабильно, но в общем то на то и выходит.

DRVTiny ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.