【问题标题】:Get the connection speed when using HttpAsyncClient获取使用 HttpAsyncClient 时的连接速度
【发布时间】:2015-08-23 12:26:41
【问题描述】:

使用同步HttpClient时,很容易获取一个请求的时间,只需在execute()方法前后加上System.currentTimeMillis()即可。

但是对于HttpAsyncClientexecute() 是异步的,它只会将任务放入队列中。所以我不知道如何获取连接的开始时间。

连接的结束时间很简单,只需在类实例FutureCallback<HttpResponse>OnComplete()方法中调用System.currentTimeMillis()即可

同步HttpClient和异步HttpAsyncClient都有三个阶段,ConnectRequestTimeConnectTimeSocketTime。所有请求将在实际执行之前排队。如果我们在HttpAsyncRequestProducer.html#generateRequest()中调用long start=System.currentTimeMillis(),我们只记录请求发送到内部队列的开始时间,所以最后你得到的是ConnectRequestTime+ConnectTime+SocketTime,当你做一个基准测试来测试批量请求,这很好,但是要测试每个请求,我们需要减去ConnectRequestTime

所以我真正的问题是如何获得ConnectRequestTime 的时间?

【问题讨论】:

    标签: httpclient apache-httpclient-4.x apache-httpasyncclient


    【解决方案1】:

    HttpAsyncRequestProducer.html#generateRequest() 应该是正确的位置。

    您可能还想看看 this 作为一个示例,了解如何在进行微基准测试时从 Apache HttpAsyncClient 中获得最大性能。

    【讨论】:

    • 谢谢,我试试看
    • 通读源码后发现,这个源码只能计算n请求的总时间,无法计算单个异步HTTP请求的时间
    • 嗯?我给了你一个答案,在哪里放置代码来记录开始时间。该示例旨在演示微基准测试的性能优化。你仍然需要自己做你需要做的事情。
    • 同步HttpClient和异步HttpAsyncClient都有三个阶段,ConnectRequestTimeConnectTimeSocketTime。所有请求将在实际执行之前排队。如果你在HttpAsyncRequestProducer.html#generateRequest()中调用long start=System.currentTimeMillis(),你只会得到请求发送到内部队列的开始时间,所以你得到的是ConnectRequestTime+ConnectTime+SocketTime,当你做一个基准测试时测试一个批量请求,没问题,但是要测试每个单独的请求,你需要减去ConnectRequestTime
    猜你喜欢
    • 2012-08-12
    • 2023-02-01
    • 2018-03-09
    • 2010-11-20
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多