4

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

代码是这样的

   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

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

我在通过同一部手机和 3G 连接到互联网的计算机上运行了一个简单的 Ajax sendpost 脚本,做同样的事情需要大约 0.300 毫秒,所以 ¿ 相同的连接,相同的动作,2 秒的差异?

/// ***更新

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

平均时间响应约为250毫秒,但第一个请求总是最多 1.7 秒,我尝试以 30 秒的间隔发送帖子,平均时间为 1.5 秒,然后我尝试以 2 秒的间隔发送帖子,第一个是 1.41 秒,接下来是 252 毫秒

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

无论如何,使用电缆连接(标准家庭 DSL)进行的相同测试始终提供约 170 毫秒间隔的固定时间响应(这里不是可靠的论点,但恕我直言,第一次尝试可能略高一些)

所以在第一次尝试中出现了严重影响移动连接的问题(或错误),有什么想法吗?

4

1 回答 1

7

尝试使用此配置

HttpClient httpclient = new DefaultHttpClient();
HttpParams httpParameters = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, WAIT_RESPONSE_TIMEOUT);
HttpConnectionParams.setTcpNoDelay(httpParameters, true);

这是关于setTcpNoDelay的javadoc :

public static void setTcpNoDelay (HttpParams params, boolean value)

自:API 级别 1

确定是否使用 Nagle 算法。Nagle 算法试图通过最小化发送的段数来节省带宽。当应用程序希望减少网络延迟并提高性能时,它们可以禁用 Nagle 算法(即启用 TCP_NODELAY)。数据将更早发送,但会增加带宽消耗。

参数

如果不使用 Nagle 的算法(即启用 TCP_NODELAY),则值为 true,否则为 false。

于 2012-11-29T09:27:11.793 回答