/ / ¿Cómo medir el tiempo de respuesta de la red utilizando Java? - java, redes, tiempo de respuesta

¿Cómo medir el tiempo de respuesta de la red utilizando Java? - java, redes, tiempo de respuesta

Tenemos un cliente y un servidor. Quiero medir el tiempo de respuesta de la red entre ellos. Cuando envío una solicitud al servidor, debe responder de inmediato a mi solicitud, debe ser como una solicitud de ping para que no haya tiempo de procesamiento en el servidor.

¿Cómo puedo hacer esto en Java?

Respuestas

2 para la respuesta № 1

He hecho esto enviando un paquete con unmarca de tiempo del cliente al servidor, y luego hacer que el servidor devuelva la misma marca de tiempo. Cuando el servidor recibe la marca de tiempo, puede compararla con la marca de tiempo actual para medir el tiempo de ida y vuelta.

Aparentemente hay una manera de generar un Ping ICMP en Java 5 y posteriores. Si quieres medir la velocidad de la red, simplemente toma System.nanoTime() Antes y después y comparar. Tenga en cuenta que si su programa se está ejecutando con privilegios insuficientes para hacer ping ICMP, Java recurrirá al uso de una solicitud de eco TCP al puerto 7, que aún se ajustará a sus necesidades.


1 para la respuesta № 2

Para garantizar que la respuesta del servidor sea lo más rápida posible, debe:

  1. tener una segunda conexión a un puerto diferente - esto es útil si desea probar la ruta al servidor, es decir, los cables - o
  2. un hilo común para todos los paquetes entrantes, quedecidirá si un paquete entrante es una solicitud de ping y responderá de inmediato, lo que es útil si desea probar la conexión actual (que tiene en cuenta otros paquetes en esa conexión).

De cualquier manera, la parte de escucha (servidor) debe tener su propio subproceso o el procesamiento de la solicitud podría caducar mientras se procesan otros paquetes.

Tenga en cuenta que, haga lo que haga para medir la velocidad de la conexión, no tendrá un valor confiable. Sin embargo, debe tener un valor aceptable si toma el promedio de varios de estos pings.


1 para la respuesta № 3

Creo que hay que distinguir entre el tiempo.llevado al servidor (máquina), y el tiempo para que su proceso del lado del servidor maneje esto. Por ejemplo, el ping simplemente medirá el tiempo de respuesta de ICMP, que es un retorno de protocolo de red de bajo nivel. Si tiene en cuenta la pila TCP y luego el procesamiento posterior por parte del servidor, ese período de tiempo será mayor.

De tu pregunta, suena como ping (ICMP) es lo que quieres. En JDK 5 y superiores, puedes hacer:

String host = "192.168.0.1"
int timeOut = 5000;
boolean status = InetAddress.getByName(host).isReachable(timeOut)

y necesitarías tiempo para usar System.nano() o similar.


0 para la respuesta № 4

usar ping debería ser suficiente o wget que traza la tasa de transferencia. Puedes usar justniffer para oler los tiempos de respuesta de los servidores en ejecución de "producción".