Измерьте Общее время передачи данных по сети от сервлетов

StackOverflow https://stackoverflow.com/questions/86008

Вопрос

Как мне измерить, сколько времени клиент должен ждать запроса?

На стороне сервера это легко, например, через фильтр.Но если мы хотим учесть общее время, включая задержку и передачу данных, это становится затруднительным.

можно ли получить доступ к базовому сокету, чтобы узнать, когда запрос будет завершен?или необходимо выполнить какие-то трюки с javascript?может быть, через синхронизацию часов между браузером и сервером?существуют ли какие-либо готовые javascripts для этой задачи?

Это было полезно?

Решение

Вы никак не можете узнать, как долго клиенту пришлось ждать исключительно со стороны сервера.Вам понадобится немного JavaScript.

Вы не хотите синхронизировать часы клиента и сервера, это излишество.Просто измерьте время между тем, как клиент отправляет запрос, и тем, когда он заканчивает отображать свой ответ.

Если клиент использует AJAX, это может быть довольно просто:вызовите new Date().getTime(), чтобы получить время в миллисекундах, когда выполняется запрос, и сравнить его со временем после обработки результата.Затем отправьте эту информацию о времени на сервер в фоновом режиме.

Для приложения, не основанного на AJAX, когда пользователь нажимает на запрос, используйте JavaScript для отправки текущей временной метки (с точки зрения клиента) на сервер вместе с запросом и передачи этой же временной метки обратно клиенту при перезагрузке результирующей страницы.В обработчике onLoad этой страницы измерьте общее затраченное время, а затем отправьте его обратно на сервер - либо используя XMLHttpRequest, либо добавляя дополнительный аргумент к следующему запросу, отправленному на сервер.

Другие советы

Если вы хотите измерить его в своем браузере для имитации любого запроса клиента, вы можете посмотреть вкладку net в firebug, чтобы узнать, сколько времени требуется для загрузки каждого фрагмента страницы и порядок загрузки.

Вы могли бы обернуть объект HttpServletResponse и OutputStream, возвращаемый HttpServletResponse.Когда вывод начинает записываться, вы можете установить StartDate, а когда он останавливается (или когда он сбрасывается и т.д.), вы можете установить stopDate.

Это может быть использовано для расчета продолжительности времени, необходимого для передачи всех данных обратно клиенту.

Мы используем его в нашем приложении, и цифры выглядят разумными.

Редактировать:вы можете установить дату начала в ServletFilter, чтобы получить продолжительность ожидания клиента.Я указал вам время, необходимое для записи выходных данных клиенту.

Вы могли бы установить буфер отправки сокета размером 0 байт (и я точно не рекомендую это), чтобы при вашем блокирующем вызове HttpResponse.send() у вас было более близкое представление о том, когда остался последний байт, но время в пути не учитывалось. Экк--Меня подташнивает от одного упоминания об этом.Вы можете сделать это в Tomcat с настройками, специфичными для соединителя.(Документация по разъему Tomcat 6)

Или вы могли бы придумать какой-то подход с отметкой времени javascript, но я бы не ожидал устанавливать часы клиента.Пришлось бы выполнить несколько вызовов к веб-серверу.

  • запрос временной метки
  • настоящая просьба
  • предоставление данных

И такой подход позволил бы покрыть задержку, хотя у вас все еще есть некоторое отклонение от джиттера.

Хммм... Интересная у вас тут проблема.:)

Проверьте Jiffy-веб, разработанный netflix , чтобы дать им более точное представление об общей странице -> время рендеринга страницы

У меня была такая же проблема.Но это Бумага JavaOne действительно помог мне решить эту проблему.Я бы попросил вас пройти через это, и оно в основном использует javascript для вычисления времени.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top