HTTP请求与HttpClient太慢?
我试图编码的Android应用程序发送一些后值在奉献服务器托管的PHP文件和存储阵列resoultHTTP请求与HttpClient太慢?
代码为约2.5本
HttpPost httppost;
DefaultHttpClient httpclient;
httppost = new HttpPost("http://IP/script.php");
HttpParams param = new BasicHttpParams();
param.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
// httppost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setContentCharset(param, "UTF-8");
httpclient = new DefaultHttpClient(param);
ResponseHandler <String> res=new BasicResponseHandler();
List<NameValuePair> nameValuePairs;
nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("id","1"));
nameValuePairs.add(new BasicNameValuePair("api", "1"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.v("1",System.currentTimeMillis()+"");// Log to know the time diff
String result= httpclient.execute(httppost, res);
Log.v("2",System.currentTimeMillis()+""); // Log to know the time diff
这个代码浪费秒(在3G或WiFi)发送帖子,并从服务器得到只是“OK”字符串,即使有良好的WiFi这一次只下降到2.2/2.0秒
我运行了一个简单的Ajax sendpost脚本,通过相同的手机和3G网络,大约需要300毫秒才能完成相同的工作连接,相同的动作,2秒的差异?
/// *** UPDATE
我再次尝试我的电脑上我的jQuery脚本(与移动3G +/HDSPA连接如)
的平均响应时间约为250毫秒但始终第一次请求高达1.7秒,我试图发送间隔30秒的帖子,我得到了1.5秒的平均时间,然后我试图发送一个间隔2秒的帖子,第一次是1.41s和下一个252ms
在这里你们可以查看图表:http://i46.tinypic.com/27zjl8n.jpg
这与电缆连接如(标准的家庭DSL)相同的测试提供了总的〜170ms间隔一个固定的时间响应,无论在这里(不实的论点,但恕我直言,也许是第一次尝试稍微高一些)
因此,在第一次尝试中会出现(或错误)严重影响移动连接的任何想法?
尝试使用此配置
HttpClient httpclient = new DefaultHttpClient();
HttpParams httpParameters = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, WAIT_RESPONSE_TIMEOUT);
HttpConnectionParams.setTcpNoDelay(httpParameters, true);
这是javadoc的约setTcpNoDelay:
public static void setTcpNoDelay (HttpParams params, boolean value)
自:API级别1
确定是否使用Nagle的算法。 Nagle的 算法尝试通过最小化发送的段的数量来节省带宽。当应用程序希望减少延迟并提高性能时,它们可以禁用Nagle的算法 (即启用TCP_NODELAY)。数据将以更高的带宽消耗成本 发送。
参数
值true,如果Nagle算法是不被使用(也就是使 TCP_NODELAY),否则为false。
是由addking setTcpNoDelay工作的方法? – SkyEagle888
2秒比它应该比它短。我已经收到毫秒响应。不能说这里出了什么问题,只是时间应该会更好。 – schwiz
@Colas,如果你提到你的问题的“带有3G”的部分是毫无意义的,那么你会很高兴,因为你在WiFi上也有同样的问题。 – Brad
@Colas,设置您的设备以使用代理服务器来查看实际正在进行的操作。将PC上的Fiddler用作代理服务器。 – Brad