我正在尝试编写一个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
此代码浪费大约2.5秒(在3G或WiFi上)发送帖子并从服务器获得“ok”字符串,即使有良好的wifi,这次只下降到2.2 / 2.0秒
我在通过同一部手机和3G连接到互联网的计算机上运行了一个简单的Ajax发送邮件脚本,这需要大约0.300毫秒才能做同样的事情¿相同的连接,相同的动作,2秒的差异?
///的 *** UPDATE
我在我的计算机上再次尝试了我的jquery脚本(使用移动3G + / HDSPA连接)
平均时间响应大约 250ms 但第一次请求高达1.7秒,我试图以30秒的间隔发送帖子,平均时间为1.5秒时间,然后我试着发送一个间隔为2秒的帖子,第一个是1.41s和nexts 252ms
在这里,你们可以查看图表:http://i46.tinypic.com/27zjl8n.jpg
与电缆连接(标准家庭DSL)相同的测试总是提供 ~170ms 间隔的固定时间响应(不是这里没有可靠的参数,但恕我直言,可能第一次尝试稍微高一点)
所以在第一次尝试中有一些(或错误的)严重影响移动连接的东西,任何想法的人?
答案 0 :(得分: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的算法,那么值为true(即启用 TCP_NODELAY),否则为false。