我使用 HttpURLConnection 访问服务器上的某些 php 文件。我确实得到了正确的结果,但是我的 GET 和响应之间的延迟非常长。我检查了像 stackoverflow 这样的网站,并尝试了一些技巧,比如 System.setProperty("http.keepAlive", "false"); setRequestProperty("连接", "关闭"); 但延迟仍然持续存在。然后我将我的 HTC 植根,安装 Shark,通过服务器捕获流量,并将 pcap 文件复制到我的 Wireshark。我比较了我的 logCat 和 Wireshark,发现我明确调用 HttpURLConnection.connect() 和 Android 传输的第一个 TCP SYN 之间有 20 秒的差距。
为了比较,我从 android 浏览器访问了服务器上的相同文件,它花了 < 2s ...
我的设备:HTC sense (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
}
我已经在这个问题上工作了几天,在网上搜索,仍然没有任何线索。非常感谢您的任何评论。