相关疑难解决方法(0)

使用HttpClient的HTTP Post请求需要2秒,为什么?

更新: 自己找到答案,见下文:-)

嗨,

我目前正在编写一个Android应用程序,它使用HTTP Post和AsyncTask在后台提交内容.为此我使用org.apache.http.client包.我的代码基于这个例子.

基本上,我的代码看起来像这样:

public void postData() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form");

    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
     Log.e(TAG,e.toString());
    } catch (IOException e) {
     Log.e(TAG,e.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是httpclient.execute(..)行需要大约1.5到3秒,我不明白为什么.仅使用HTTP Get请求页面大约需要80 ms左右,因此问题似乎不是网络延迟本身.

问题似乎也不在服务器端,我也尝试将数据发布到http://www.disney.com/同样慢的结果.Firebug在本地向我的服务器发送数据时显示1 …

android http httpclient

41
推荐指数
2
解决办法
3万
查看次数

使用HttpClient的HTTP请求太慢了?

我正在尝试编写一个Android应用程序,它将一些帖子值发送到托管在专用服务器上的php文件并存储数组resoult

代码是这样的

   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
Run Code Online (Sandbox Code Playgroud)

这段代码浪费了大约2.5秒(在3G或WiFi上)发送帖子并从服务器获得"ok"字符串,即使有好的wifi这次只下来2.2/2.0秒

我在我的计算机上运行了一个简单的Ajax发送邮件脚本,通过同一部手机和3G连接到互联网,需要大约.300ms才能做同样的事情¿相同的连接,相同的动作,2秒的差异?

/// ***更新

我在我的计算机上再次尝试了我的jquery脚本(使用移动3G +/HDSPA连接)

的平均时间应答是大约250毫秒,但总是在第一请求到1.7secs,我试图以30秒的间隔发送讯息和我得到1.5秒的平均时间,然后我试图发送以2秒的间隔的柱,所述第一是1.41s,接近252ms

在这里,你们可以查看图表:http://i46.tinypic.com/27zjl8n.jpg

这种与电缆连接(标准家用DSL)相同的测试始终提供约170ms间隔的固定时间响应(这里没有可靠的参数,但恕我直言,可能第一次尝试略高一点) …

eclipse android httpclient keep-alive asynchttpclient

4
推荐指数
1
解决办法
1万
查看次数