it-swarm-vi.tech

Làm cách nào tôi có thể tìm thấy thời gian phản hồi của yêu cầu HTTP thông qua Ổ cắm

Tôi đang sử dụng ổ cắm Java, được kết nối với máy chủ. [.__.] Nếu tôi gửi yêu cầu ĐẦU TIÊN http, làm cách nào tôi có thể đo thời gian phản hồi từ máy chủ? Tôi phải sử dụng bộ định thời Java được cung cấp hay có cách nào dễ hơn không?

Tôi đang tìm kiếm một câu trả lời ngắn, tôi không muốn sử dụng các giao thức khác, v.v ... Rõ ràng là tôi không muốn có một giải pháp ràng buộc ứng dụng của mình với một HĐH cụ thể. Xin mọi người, giải pháp IN-CODE chỉ. 

19
Martin Andersson

Tôi muốn nói rằng nó phụ thuộc vào khoảng thời gian chính xác mà bạn đang thử đo, lượng thời gian từ byte cuối cùng của yêu cầu mà bạn gửi cho đến byte đầu tiên của phản hồi mà bạn nhận được? Hoặc cho đến khi nhận được toàn bộ phản hồi? Hay bạn đang cố gắng chỉ đo thời gian phía máy chủ?

Nếu bạn đang cố gắng chỉ đo thời gian xử lý phía máy chủ, bạn sẽ gặp khó khăn trong việc kiểm tra lượng thời gian vận chuyển mạng để yêu cầu của bạn đến và phản hồi sẽ được trả lại. Mặt khác, vì bạn đang tự mình quản lý yêu cầu thông qua Ổ cắm, bạn có thể đo thời gian đã trôi qua giữa hai thời điểm bằng cách kiểm tra đồng hồ hệ thống và tính toán sự khác biệt. Ví dụ:

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

Mã này sẽ đo thời gian từ khi bạn bắt đầu viết yêu cầu đến khi bạn hoàn thành nhận được phản hồi và in kết quả (giả sử bạn đã thực hiện các phương pháp đọc/ghi cụ thể của mình).

11
Dave L.

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

19
A B

Bạn có thể sử dụng thời gian và cuộn tròn và thời gian trên dòng lệnh. Đối số -I cho curl chỉ thị cho nó chỉ yêu cầu tiêu đề.

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

Một cái gì đó như thế này có thể làm cho lừa

[.__.] nhập Java.io.IOException; [.__.] [.__.] nhập org.Apache.commons.httpclient.HttpClient; [.__.] .___] nhập org.Apache.commons.httpclient.URIException; [.__.] nhập org.Apache.commons.httpclient.methods.HeadMethod; [.__. ; [.___.] // nhập org.Apache.commons.lang3.time.StopWatch [.__.] [.__.] lớp công khai Main {[.__.] [.__.] public static void main (String [] args) ném URIException {[.__.] StopWatch watch = new StopWatch (); [.__.] HttpClient client = new HttpClient (); [.__.] .com /");[.__.[[.__.] hãy thử {[.__.] watch.start (); [.__.] client.executeMethod (phương thức); [.___.]} e) {[.__.] e.printStackTrace (); [.__.]} cuối cùng {[.__.] watch.stop (); [.__.]} [.__.] [.__.] .out.println (St ring.format ("% s% s% d:% s", method.getName (), method.getURI (), method.getStatusCode (), watch.toString ())); [. .]} [.___.]} [.__.]
[.__.] ĐẦU http://stackoverflow.com/ 200: 0: 00: 00.404 [.__.]
7
Dave Cheney

Có thể tôi đang thiếu một cái gì đó, nhưng tại sao bạn không sử dụng:

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

Sử dụng AOP để chặn các cuộc gọi đến ổ cắm và đo thời gian phản hồi.

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

Bằng cách này, bạn có thể tính thời gian phản hồi thực của dịch vụ của mình độc lập với tốc độ mạng. 

0
Sudabe-Neirizi