使用同步HttpClient
时,很容易获得一个请求的时间,只需在System.currentTimeMillis()
方法之前和之后放置execute()
。
但是当谈到HttpAsyncClient
时,execute()
是异步的,这只会将任务放入队列中。所以我不知道如何获得连接的开始时间。
连接的结束时间很简单,只需在类实例System.currentTimeMillis()
的{{1}}方法中调用OnComplete()
同步FutureCallback<HttpResponse>
和异步HttpClient
都有三个阶段,HttpAsyncClient
,ConnectRequestTime
,ConnectTime
。在实际执行之前,所有请求都将排队。如果我们在SocketTime
中调用long start=System.currentTimeMillis()
,我们只需记下请求发送到内部队列的开始时间,所以最后得到的是HttpAsyncRequestProducer.html#generateRequest()
+ {{1 } + ConnectRequestTime
,当您执行基准测试批处理请求时,没关系,但要测试每个请求,我们需要减去ConnectTime
。
所以我真正的问题是如何获得SocketTime
的时间?
答案 0 :(得分:0)
HttpAsyncRequestProducer.html#generateRequest()应该是正确的地方。
您可能还想看一下this作为在进行微基准测试时如何从Apache HttpAsyncClient中挤出最大性能的示例。