it-swarm-id.com

Bagaimana saya dapat menemukan waktu respons permintaan HTTP melalui Socket

Saya menggunakan soket Java, terhubung ke server. Jika saya mengirim permintaan http HEADER, bagaimana saya bisa mengukur waktu respons dari server? Haruskah saya menggunakan pengatur waktu Java yang disediakan, atau apakah ada cara yang lebih mudah?

Saya mencari jawaban singkat, saya tidak ingin menggunakan protokol lain dll. Jelas saya tidak ingin memiliki solusi yang mengikat aplikasi saya ke OS tertentu. Silakan orang-orang, solusi IN-CODE saja. 

19
Martin Andersson

Saya akan mengatakan itu tergantung pada interval tepat apa yang Anda coba ukur, jumlah waktu dari byte terakhir dari permintaan yang Anda kirim sampai byte pertama dari respons yang Anda terima? Atau sampai seluruh tanggapan diterima? Atau apakah Anda mencoba mengukur waktu sisi server saja?

Jika Anda mencoba mengukur waktu pemrosesan sisi server saja, Anda akan mengalami kesulitan menentukan jumlah waktu yang dihabiskan dalam transit jaringan untuk permintaan Anda untuk tiba dan respons untuk kembali. Jika tidak, karena Anda mengelola sendiri permintaan Anda melalui Socket, Anda dapat mengukur waktu yang telah berlalu antara dua momen dengan memeriksa jam Sistem dan menghitung perbedaannya. Sebagai contoh:

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

Kode ini akan mengukur waktu sejak Anda mulai menulis permintaan Anda hingga ketika Anda selesai menerima respons, dan mencetak hasilnya (dengan asumsi Anda menerapkan metode baca/tulis spesifik Anda).

11
Dave L.

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

19
A B

Anda dapat menggunakan waktu dan ikal dan waktu pada baris perintah. Argumen -I untuk curl memerintahkannya untuk hanya meminta header.

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

Sesuatu seperti ini mungkin berhasil

 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) melempar URIException {
 StopWatch watch = new StopWatch (); 
 Klien HttpClient = new HttpClient (); 
 Metode HttpMethod = HeadMethod baru ("http: // stackoverflow .com /");[.____.[
 coba {
 watch.start (); 
 client.executeMethod (metode); 
} catch (IOException e) {
 e.printStackTrace (); 
} akhirnya {
 watch.stop (); 
} 
 
 Sistem .out.println (St ring.format ("% s% s% d:% s", method.getName (), method.getURI (), method.getStatusCode (), watch.toString ())); 
 
} 
} 
 KEPALA http://stackoverflow.com/ 200: 0: 00: 00.404 
7
Dave Cheney

Mungkin saya kehilangan sesuatu, tetapi mengapa Anda tidak menggunakan saja:

// 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

Gunakan AOP untuk menyadap panggilan ke soket dan mengukur waktu respons.

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

Dengan cara ini, Anda dapat menghitung waktu respons nyata dari layanan Anda terlepas dari kecepatan jaringan. 

0
Sudabe-Neirizi