java - example - ¿Cómo puedo encontrar el tiempo de respuesta de una solicitud HTTP a través de un socket?
java post request json (6)
Puede usar el tiempo y el curl y el tiempo en la línea de comandos. El argumento -I para curl indica que solo solicite el encabezado.
time curl -I ''http://server:3000''
Estoy usando un socket Java, conectado a un servidor. Si envío una solicitud HTTP HEADER, ¿cómo puedo medir el tiempo de respuesta del servidor? ¿Debo usar un temporizador Java provisto, o hay una manera más fácil?
Estoy buscando una respuesta breve, no quiero usar otros protocolos, etc. Obviamente, tampoco quiero tener una solución que vincule mi aplicación a un sistema operativo específico. Por favor, personas, soluciones IN-CODE solamente.
Use AOP para interceptar llamadas al socket y medir el tiempo de respuesta.
Yo diría que depende de qué intervalo exacto intente medir, la cantidad de tiempo desde el último byte de la solicitud que envía hasta el primer byte de la respuesta que recibe. O hasta que se reciba toda la respuesta? ¿O está tratando de medir el tiempo del lado del servidor solamente?
Si está tratando de medir solo el tiempo de procesamiento del lado del servidor, va a ser difícil calcular la cantidad de tiempo que pasa en el tránsito de la red para que llegue su solicitud y que la respuesta vuelva. De lo contrario, dado que usted está administrando la solicitud usted mismo a través de un Socket, puede medir el tiempo transcurrido entre dos momentos cualquiera al verificar el reloj del Sistema y calcular la diferencia. Por ejemplo:
public void sendHttpRequest(byte[] requestData, Socket connection) {
long startTime = System.currentTimeMillis();
writeYourRequestData(connection.getOutputStream(), requestData);
byte[] responseData = readYourResponseData(connection.getInputStream());
long elapsedTime = System.currentTimeMillis() - startTime;
System.out.println("Total elapsed http request/response time in milliseconds: " + elapsedTime);
}
Este código mediría el tiempo desde que comienza a escribir su solicitud hasta que termine de recibir la respuesta, e imprime el resultado (suponiendo que tiene implementados sus métodos específicos de lectura / escritura).
curl -s -w "%{time_total}/n" -o /dev/null http://server:3000
Tal vez me esté perdiendo algo, pero ¿por qué no solo usas:
// open your connection
long start = System.currentTimeMillis();
// send request, wait for response (the simple socket calls are all blocking)
long end = System.currentTimeMillis();
System.out.println("Round trip response time = " + (end-start) + " millis");
Algo como esto podría hacer el truco
import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.methods.HeadMethod; import org.apache.commons.lang.time.StopWatch; //import org.apache.commons.lang3.time.StopWatch public class Main { public static void main(String[] args) throws URIException { StopWatch watch = new StopWatch(); HttpClient client = new HttpClient(); HttpMethod method = new HeadMethod("http://.com/"); try { watch.start(); client.executeMethod(method); } catch (IOException e) { e.printStackTrace(); } finally { watch.stop(); } System.out.println(String.format("%s %s %d: %s", method.getName(), method.getURI(), method.getStatusCode(), watch.toString())); } }
HEAD http://.com/ 200: 0:00:00.404