我有一个基于 Java Apache HttpCore 4 的小型客户端类,它调用服务,我想测量 http 请求/响应往返的响应时间。我认为有一种方法可以从 HttpResponse 对象的元数据中读取它。但我无法在响应对象中获得响应时间。所以,我的解决方案是我存储了拨打电话前的时间,然后测量了拨打电话后的时间,不同的是经过的时间。
BasicHttpRequest request = new BasicHttpRequest("GET", target);
request.setParams(params);
httpexecutor.preProcess(request, httpproc, context);
long start = System.nanoTime();
HttpResponse httpResponse = httpexecutor.execute(request, conn, context);
long elapsed = System.nanoTime() - start;
System.out.println("Elapsed nano seconds -->" + elapsed);
httpResponse.setParams(params);
httpexecutor.postProcess(httpResponse, httpproc, context);
例如,我得到以下经过时间:经过时间 --> 1561599815
我可以从响应对象中读取具有以下值的以下标头,但我找不到与响应时间相关的任何内容:
| Server --> Apache-Coyote/1.1 |
| Date --> Mon, 26 Aug 2013 19:22:00 GMT |
| Content-Type --> application/json |
| Transfer-Encoding --> chunked |
上述解决方案在异步非阻塞代码中特别难看,我不得不通过匿名内部函数 FutureCallback 进行回调函数调用。像这样:
requester.execute(new BasicAsyncRequestProducer(target, request),
new BasicAsyncResponseConsumer(), pool,
new BasicHttpContext(),
// Handle HTTP response from a callback
new FutureCallback<HttpResponse>() {
private int startTime; ...//etc
所以这段代码并不优雅。我想得到响应对象来给我 http 流量的经过时间。我怎样才能做到这一点?
我正在使用 httpClient 4.2、httpCore-nio 4.2、httpasyncclient 4.0 beta。