【发布时间】:2014-02-20 14:27:55
【问题描述】:
大家好,
我的应用程序需要通过在 Android 上使用 HttpClient (HTTP GET) 来查找下载小文件所用的时间。
我在 HttpClient.execute 之前和之后捕获了 nanoTime,以便找出经过的时间。同时,我收集了 TCP 转储以找出 HTTP GET 和响应 200 之间经过的时间。
我发现 nanoTime 的差异比 TCP 转储的经过时间高 30% 到 50%。
有什么建议可以减少这种差异吗?使用 Httpurl 连接?
最好的问候,
霍英东
【问题讨论】:
-
这很奇怪。在仔细查看 tcp 转储后,我发现......我的应用程序发送了 6 个 HTTP GET(每个 200 响应之后一个接一个),并且在每个 HTTP GET 之前,TCP 需要再次同步和确认。那是消耗时间......有人对Android httpclient有见解吗?我的应用程序如何保持 TCP 连接处于活动状态?
-
是否设置
Connection: keep-alive标头?我建议你试试 HttpURLConnection。对于简单的 GET 来说,工作量并不大。否则请查看DavidWebb。我想你将无法衡量与 HttpURLConnection 相比的性能差异,但它有一个很好的界面。 (与 HttpURLConnection 相比,所有接口都很好。)看看stackoverflow.com/questions/13677261/… 可能你的服务器或某些代理拒绝保持连接处于活动状态 -
我也试过... httpurlconnection 和 httpclient。我们有 iOS 应用程序来执行相同的任务。根据 iOS 应用程序的 TCP 转储,SYN 仅发生在第一个 HTTP GET 开始之前。因此,远程服务器应该没问题。但 Android 应用程序无法重用连接...
标签: java android httpclient httpurlconnection