gpt4 book ai didi

android - 使用 HttpClient 的 HTTP Post 请求需要 2 秒,为什么?

转载 作者:IT王子 更新时间:2023-10-28 23:59:54 24 4
gpt4 key购买 nike

Update: Found the answer myself, see below :-)

你好,

我目前正在编写一个使用 HTTP Post 和 AsyncTask 在后台提交内容的 Android 应用程序。我使用 org.apache.http.client为此打包。我的代码基于 this example .

基本上,我的代码如下所示:

public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form");

try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);

} catch (ClientProtocolException e) {
Log.e(TAG,e.toString());
} catch (IOException e) {
Log.e(TAG,e.toString());
}
}

问题是 httpclient.execute(..) 行大约需要 1.5 到 3 秒,我不明白为什么。仅使用 HTTP Get 请求页面大约需要 80 毫秒左右,因此问题似乎不在于网络延迟本身。

问题似乎也不在服务器端,我也尝试过将数据发布到 http://www.disney.com/结果同样缓慢。 Firebug 在本地将数据发布到我的服务器时显示 1 毫秒的响应时间。

这发生在模拟器和我的 Nexus One 上(都使用 Android 2.2)。

如果你想看完整的代码,我把它放在 GitHub .

这只是一个在后台使用 AsyncTask 进行 HTTP Post 的虚拟程序,只需按一下按钮。这是我的第一个 Android 应用程序,也是我很长一段时间以来的第一个 java 代码。顺便说一句,也是我关于 Stackoverflow 的第一个问题 ;-)

知道为什么 httpclient.execute(httppost) 需要这么长时间吗?

最佳答案

好的,我自己通过更多调查解决了这个问题。我所要做的就是添加一个将 HTTP 版本设置为 1.1 的参数,如下所示:

HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpClient httpclient = new DefaultHttpClient(params);

感谢非常好的 HttpHelper Class,我发现了这个。来自 and-bookworm 和一些反复试验。

如果我没记错的话,HTTP 1.0 会为每个请求打开一个新的 TCP 连接。这是否解释了大的延迟?

现在,通过 WLAN 的 HTTP POST 请求需要 50 到 150 毫秒,而通过 3G 则需要 300 到 500 毫秒。

关于android - 使用 HttpClient 的 HTTP Post 请求需要 2 秒,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3046424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com