HTTP请求与HttpClient太慢?

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间隔一个固定的时间响应,无论在这里(不实的论点,但恕我直言,也许是第一次尝试稍微高一些)

因此,在第一次尝试中会出现(或错误)严重影响移动连接的任何想法?

+0

2秒比它应该比它短。我已经收到毫秒响应。不能说这里出了什么问题,只是时间应该会更好。 – schwiz

+0

@Colas,如果你提到你的问题的“带有3G”的部分是毫无意义的,那么你会很高兴,因为你在WiFi上也有同样的问题。 – Brad

+0

@Colas,设置您的设备以使用代理服务器来查看实际正在进行的操作。将PC上的Fiddler用作代理服务器。 – Brad

尝试使用此配置

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。

+1

是由addking setTcpNoDelay工作的方法? – SkyEagle888