【问题标题】:Need improving performance of HttpClient of AndroidAndroid HttpClient 性能需要提升
【发布时间】: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


【解决方案1】:

如果是简单的 GET(未经授权等),我会使用 Socket 并实现简单的 GET 方法。

https://developer.android.com/reference/java/net/Socket.html

【讨论】:

  • 谢谢,我会试一试。
  • 理论上应该没有比普通套接字操作更快的了:)
  • 我仍然不知道为什么 httpurlconnection 和 httpclient 不能重用我以前的 TCP 连接。但我试图自己打开 TCP 套接字......它工作......
【解决方案2】:

Google recommends 使用 HttpURLConnection。也许您可以使用 SPDY 提高速度,例如使用OkHttp,但这必须得到网络服务器的支持。

顺便说一句,您是如何获得 TCP 转储的?在安卓设备上?根?或在您的网络服务器上。如果是网络服务器,那么您的测量延迟,而不是 HttpClient 开销。 (当然你没有这样做,愚蠢的问题。)

【讨论】:

  • 测试设备已“Rooted”,我可以从该设备获取转储
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多