it-swarm-tr.com

Bir HTTP isteğinin yanıt süresini bir Soket aracılığıyla nasıl bulabilirim

Bir sunucuya bağlı bir Java soketi kullanıyorum. HEADER http isteği gönderirsem, cevap süresini sunucudan nasıl ölçebilirim? Verilen bir Java zamanlayıcı kullanmalı mıyım, yoksa daha kolay bir yolu var mı?

Kısa bir cevap arıyorum, diğer protokolleri vb. Kullanmak istemiyorum. Açıkçası, uygulamamı belirli bir işletim sistemine bağlayan bir çözüm bulmak istemiyorum. Lütfen insanlar, yalnızca IN-CODE çözümleri. 

19
Martin Andersson

Ne kadar ölçüm yapmaya çalıştığınıza, isteğinizin son baytından aldığınız cevabın ilk baytına kadar geçen süreye bağlı olduğunu söyleyebilirim. Veya tüm cevap alınana kadar? Yoksa sadece sunucu tarafındaki zamanı ölçmeye mi çalışıyorsun?

Yalnızca sunucu tarafı işlem süresini ölçmeye çalışıyorsanız, isteğinizin gelmesi ve geri dönüşün cevabı için ağ geçişinde harcanan süreyi hesaba katarak zor zaman geçireceksiniz. Aksi halde, talebi bir Soket aracılığıyla kendiniz yönettiğiniz için, Sistem saatini kontrol ederek ve farkı hesaplayarak herhangi iki an arasındaki geçen süreyi ölçebilirsiniz. Örneğin:

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);
}

Bu kod, cevabınızı almayı tamamladığınızda isteğinizi yazmaya başladığınızda geçen süreyi ölçer ve sonucu yazdırır (özel okuma/yazma yöntemlerinizi uyguladığınızı varsayarak).

11
Dave L.

curl -s -w "%{time_total}\n" -o /dev/null http://server:3000

19
A B

Komut satırında zaman, kıvrılma ve zaman kullanabilirsiniz. Curl için -I argümanı, sadece üstbilgiyi istemesini ister.

time curl -I 'http://server:3000'
12
hoyhoy

Böyle bir şey hile yapabilir

 ithalat Java.io.IOException; 
 
 ithalat org.Apache.commons.httpclient.HttpClient; 
 ithalat 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 ; 
 // ithalat org.Apache.commons.lang3.time.StopWatch 
 
 kamu sınıfı Main {
 
 public static void main (String) [] args) URIException'ı attı {
 StopWatch watch = new StopWatch (); 
 HttpClient client = new HttpClient (); 
 HttpMethod yöntemi = yeni HeadMethod ("http: // stackoverflow .com /");;L.____.LASH.____.] deneyin {
 watch.start (); 
 client.executeMethod (method); 
} catch (IOException) e) {
 e.printStackTrace (); 
} sonunda {
 watch.stop (); 
} 
 
 Sistem .out.println (St ring.format ("% s% s% d:% s", method.getName (), method.getURI (), method.getStatusCode (), watch.toString ())); 
 
} 
} 
 HEAD http://stackoverflow.com/200: 0: 00: 00.404 
7
Dave Cheney

Belki bir şeyleri özlüyorum, ama neden sadece kullanmıyorsun:

// 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");
2
Kevin Day

Sokete yapılan çağrıları kesmek ve yanıt süresini ölçmek için AOP'yi kullanın.

0
Adi
@Aspect
@Profile("performance")
@Component
public class MethodsExecutionPerformance {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Pointcut("execution(* it.test.microservice.myService.service.*.*(..))")
    public void serviceMethods() {
    }

    @Around("serviceMethods()")
    public Object monitorPerformance(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        StopWatch stopWatch = new StopWatch(getClass().getName());
        stopWatch.start();
        Object output = proceedingJoinPoint.proceed();
        stopWatch.stop();
        logger.info("Method execution time\n{}", stopWatch.prettyPrint());
        return output;
    }
}

Bu şekilde, servisinizin gerçek yanıt süresini, şebeke hızından bağımsız olarak hesaplayabilirsiniz. 

0
Sudabe-Neirizi