的HttpCore用于测量http请求/响应的经过时间(HttpCore for measuring

2019-09-26 05:03发布

我有一个小的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氧化镍4.2,httpasyncclient 4.0测试版。

Answer 1:

在阻塞I / O模式请求执行(或处理)被立即接收消息头(请求线+报头)后终止。 消息体,可用时,与内容实体作为关联InputStream实例。 这使得消费者对内容直接从底层网络套接字流。 所以,你必须是确保响应内容实体完全消耗。

    long start = System.nanoTime();
    HttpResponse httpResponse = httpexecutor.execute(request, conn, context);
    EntityUtils.consume(httpResponse.getEntity());
    long elapsed = System.nanoTime() - start;


Answer 2:

所以这个代码是不优雅。 我想获得响应对象给我的http流量所经过的时间。 我怎样才能做到这一点?

该响应来自收到您的请求,服务器发送。 因此,服务器可以发送您的唯一时间是它需要处理请求的时间。 但是,你有兴趣在网络业务一样,所以这种做法将不适合你啦。

  • 如果你只需要这个时间测量一次,留下的代码,因为它是。 它看起来并不很漂亮,但是这是通常的方式回调怎么看起来像在Java中。
  • 如果你需要一次以上,您可以创建发送请求并执行时间测量你一个辅助方法。 这样,你可以把它在一个地方。


文章来源: HttpCore for measuring http request/response elapsed time