为什么数据上的第一个http请求太慢?android httpurlconnection数据连接速度慢
我在下面几行中使用了一些东西:在一行中做一个3个HTTP请求(一个接一个),然后等待一个给定的时间,然后再循环做3个HTTP请求。
我正在使用keep-alive,它基本上也正常工作,但在第一个HTTP请求上,每次我从3 HTTP请求开始时都会有2秒的惩罚。只有第一个HTTP请求有这2秒的惩罚。如果我将连续HTTP请求之间的等待时间降低到200毫秒,所有请求都很快,而没有第一个请求看到这2秒的惩罚。
显然这听起来像第一个请求可能不使用保持连接,但事实并非如此。我在服务器上运行tcpdump,并且可以清楚地看到所有请求都使用相同的TCP连接而不关闭,并再次建立新的连接。服务器上的保持活动状态设置为60秒,而等待应用程序的时间为5秒。另外,当我切换到WIFI这种行为,我看不到。与此同时等待所有请求都很快。
在HTTP连接的代码是使用HttpURLConnection类和如下所示:
m_res.error = null;
HttpURLConnection connection;
try {
connection = (HttpURLConnection)(new URL(m_url + "/" + m_call.command).openConnection());
connection.setDoOutput(true); // triggers POST.
connection.setDoInput(true);
connection.setRequestProperty("Accept-Charset", m_charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + m_charset);
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Accept-Encoding", "gzip");
//connection.setChunkedStreamingMode(0);
OutputStream output = null;
try {
output = connection.getOutputStream();
output.write(m_call.query_string.getBytes(m_charset));
InputStream response = null;
try {
response = connection.getInputStream();
if ("gzip".equals(connection.getContentEncoding())) {
response = new GZIPInputStream(response);
}
}
catch (IOException e) {
response = connection.getErrorStream();
}
if (response == null) {
m_res.error = "Connection Error";
}
else {
m_res.body = getAsString(response);
m_res.status = connection.getResponseCode();
}
}
catch (IOException e) {
e.printStackTrace();
m_res.error = "Connection Error";
}
finally {
if (output != null)
try {
output.close();
} catch (IOException logOrIgnore) {}
}
}
}
和您的问题是... –
为什么数据连接上的第一个http请求如此缓慢? – domcyrus