Pregunta

¿Cómo puedo medir el tiempo que un cliente tiene que esperar por una solicitud.

En el lado del servidor es fácil, a través de un filtro, por ejemplo.Pero si queremos tomar en cuenta el tiempo total incluyendo la latencia y la transferencia de datos, se hace difícil.

es posible acceder al socket subyacente a ver cuando finalice la solicitud?o es necesario hacer algunos trucos de javascript?tal vez a través de reloj de sincronización entre el navegador y el servidor?hay prefabricados javascripts para esta tarea?

¿Fue útil?

Solución

No hay manera que usted puede saber el tiempo que el cliente tenía que esperar puramente desde el lado del servidor.Usted necesitará algo de JavaScript.

Usted no desea sincronizar el cliente y el servidor relojes, eso es una exageración.Basta con medir el tiempo entre el momento en que el cliente hace la solicitud, y cuando acaba de mostrar su respuesta.

Si el cliente es AJAX, esto puede ser bastante fácil:llame a new Date().getTime() para obtener el tiempo en milisegundos cuando se realiza la solicitud, y compararlo con el tiempo después de que el resultado se analiza.Luego de enviar este momento información al servidor en segundo plano.

Para un no-AJAX de aplicación, cuando el usuario hace clic en una solicitud, uso de JavaScript para enviar la actual marca de tiempo (desde el punto de vista del cliente) al servidor junto con la consulta, y se pasa la misma marca de tiempo atrás hasta que el cliente cuando la página se vuelve a cargar.En la página del controlador onLoad, medir el tiempo total transcurrido, y luego lo envía de vuelta al servidor, ya sea con un XmlHttpRequest o viradas en un argumento extra para la siguiente petición al servidor.

Otros consejos

Si desea medida de su navegador para simular cualquier solicitud de cliente puedes ver la ficha de net en firebug para ver cuánto tiempo se requiere para que cada pieza de la página para la descarga y el orden de descarga.

Usted podría ajustar el objeto HttpServletResponse y el OutputStream devuelto por el HttpServletResponse.Cuando la producción comienza a escribir podría establecer una startDate, y cuando se detiene (o cuando se vacían etc) puede establecer un stopDate.

Esto puede ser usado para calcular la longitud de tiempo que tomó para transmitir todos los datos para el cliente.

Lo estamos utilizando en nuestra aplicación y los números parecen razonables.

editar:puede establecer la fecha de inicio en un ServletFilter para obtener la longitud de tiempo que el cliente esperaba.Yo le di a la longitud de tiempo que tomó para escribir los resultados para el cliente.

Podrías poner un 0 byte del búfer de envío de socket (y no sé exactamente lo recomendamos), de modo que cuando el bloqueo de llamadas a HttpResponse.send() tiene más de cerca la idea de que el último byte a la izquierda, pero el tiempo de viaje no está incluido. Ekk--Me siento mareado, incluso mencionando.Usted puede hacer esto en Tomcat con conector de configuración específica.(Tomcat 6 Conector de la documentación)

O usted puede venir para arriba con algo de javascript marca de tiempo de enfoque, pero yo no esperaría a configurar el cliente de reloj.Varias llamadas al servidor web tendría que ser hecho.

  • marca de tiempo de la consulta
  • la verdadera solicitud
  • informes de los datos

Y este enfoque de la cubierta de latencia, a pesar de que todavía tiene algunos fluctuación de la varianza.

Hmmm...interesante problema que tenemos ahí.:)

Echa un vistazo Jiffy-web, desarrollado por netflix para darles una visión más precisa del total de la página -> página de el tiempo de procesamiento

Yo tenía el mismo problema.Pero este JavaOne De Papel realmente me ha ayudado a resolver este problema.Yo pediría usted a ir a través de él y que básicamente se utiliza javascript para calcular el tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top