3

我正在尝试从 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客户端接收数据的时间之间的时间差。(传输的数据非常小 - < 5 个字符)

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

我的问题如下:

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

1 回答 1

1

添加这个:

HttpConnectionParams.setConnectionTimeout(httpParams,
            TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
于 2012-09-28T09:52:05.620 回答