【问题标题】:Unexpected delay in Http Post using Default HTTP Client (Android)使用默认 HTTP 客户端 (Android) 的 Http Post 出现意外延迟
【发布时间】:2012-09-28 09:33:57
【问题描述】:

我正在尝试从 android 应用程序上传文件,在服务器上对其进行处理并获得结果。 服务器端处理大约需要 10 秒,但是在 android 应用上,该过程大约需要 15 秒。我无法解释差异。

这是应用程序中的相关代码部分:

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpClient client = new DefaultHttpClient(params);
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Authorization", getAuthString());
httpPost.setEntity(multipart);
httpPost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
HttpResponse response;
try {
    Long start = System.currentTimeMillis();
    Log.v("Network Call", "Time start: " + start);
    response = client.execute(httpPost);
    Long end = System.currentTimeMillis();
    Log.v("Network Call", "Time end:" + end);
    Log.v("Network Call Response Time", "Time:" + (end - start));
}

以上日志显示总时间约为 15 秒(11-17 秒之间随机变化) 在服务器上,我测量了发出 HTTP Post 请求的时间,以及 apache 完成请求所用的时间。这大约是 10 秒(基本一致)。

差值恰好是服务器php脚本结束与android客户端接收数据的时间差。 (传输的数据非常小 -

从客户端发送到服务器的其他请求(GET 请求)不会发生这种情况 - 总时间不到一秒,传输的数据更大(因此网络延迟和带宽似乎不是问题)

我的问题如下:

  1. 我是否正确发布数据?有没有我应该调整的字段让 DefaultHttpClient 知道我需要等待 10 秒?
  2. 是否有任何方法可以跟踪为什么此网络调用在服务器完成处理请求和客户端接收请求之间花费时间?

【问题讨论】:

  • 是的,这部分代码在里面运行和AsyncTask
  • 我得到了 200 毫秒 - 300 毫秒的延迟.. dint 解决了我的问题.. 希望你能得到答案..
  • 你好,你知道如何避免这个延迟时间吗?

标签: php android apache post


【解决方案1】:

添加这个:

HttpConnectionParams.setConnectionTimeout(httpParams,
            TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);

【讨论】:

  • 并初始化这个变量:final int TIMEOUT_MILLISEC = 20000;
猜你喜欢
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多