Измерение общего времени передачи по сети от сервлетов - PullRequest
1 голос
/ 17 сентября 2008

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

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

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

Ответы [ 6 ]

3 голосов
/ 17 сентября 2008

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

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

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

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

3 голосов
/ 17 сентября 2008

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

2 голосов
/ 17 сентября 2008

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

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

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

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

0 голосов
/ 09 марта 2009

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

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

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

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

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

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

...