调用HttpURLConnection.connect()后启动TCP SYN的长延迟

时间:2012-05-09 06:22:38

标签: android tcp delay connect httpurlconnection

我使用HttpURLConnection访问服务器上的某些php文件。我确实得到了正确的结果但是我的GET和响应之间的延迟非常长。我检查了像stackoverflow这样的网站并尝试了一些技巧,比如System.setProperty(“http.keepAlive”,“false”); setRequestProperty(“connection”,“close”);但延迟仍然存在。然后我根据我的HTC,安装了Shark,捕获了服务器的流量,并将pcap文件复制到我的Wireshark。我比较了我的logCat和Wireshark,发现在显式调用HttpURLConnection.connect()和Android传输的第一个TCP SYN之间有20秒的差距。

为了比较,我从Android浏览器访问服务器上的相同文件,它花了< 2s ......

我的设备:HTC轰动(Android 2.3.4)

我的代码(在AsyncTask中)是这样的:

System.setProperty("http.keepAlive", "false");

URL httpUrl = new URL(url);
HttpURLConnection connection = null;
connection = (HttpURLConnection) httpUrl.openConnection();

// prepare the request
if (connection != null) {
connection.setRequestProperty("connection", "close");
connection.setDoInput(true);
connection.setRequestMethod("GET");
connection.setUseCaches(false);
connection.setFollowRedirects(false);
connection.setRequestProperty("Accept-Encoding", "identity");
connection.setConnectTimeout(CONNECTION_TIMEOUT);  // doesn't seem to work anyway
connection.setRequestProperty("User-Agent", USER_AGENT);

connection.connect();

// get response here .... getContentEncoding(); getContentLength(); getHeaderFieldKey(); etc

}

我已经在这个问题上工作了几天,在网上搜索仍然没有任何线索。非常感谢任何评论。

1 个答案:

答案 0 :(得分:0)

我向Google项目提交了一份错误报告,他们已将其复制。

http://code.google.com/p/android/issues/detail?id=30664

会看到。