【发布时间】:2015-08-23 12:26:41
【问题描述】:
使用同步HttpClient时,很容易获取一个请求的时间,只需在execute()方法前后加上System.currentTimeMillis()即可。
但是对于HttpAsyncClient,execute() 是异步的,它只会将任务放入队列中。所以我不知道如何获取连接的开始时间。
连接的结束时间很简单,只需在类实例FutureCallback<HttpResponse>的OnComplete()方法中调用System.currentTimeMillis()即可
同步HttpClient和异步HttpAsyncClient都有三个阶段,ConnectRequestTime、ConnectTime、SocketTime。所有请求将在实际执行之前排队。如果我们在HttpAsyncRequestProducer.html#generateRequest()中调用long start=System.currentTimeMillis(),我们只记录请求发送到内部队列的开始时间,所以最后你得到的是ConnectRequestTime+ConnectTime+SocketTime,当你做一个基准测试来测试批量请求,这很好,但是要测试每个请求,我们需要减去ConnectRequestTime。
所以我真正的问题是如何获得ConnectRequestTime 的时间?
【问题讨论】:
标签: httpclient apache-httpclient-4.x apache-httpasyncclient