更新: 自己找到答案,见下文:-)
嗨,
我目前正在编写一个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应用程序,它将一些帖子值发送到托管在专用服务器上的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间隔的固定时间响应(这里没有可靠的参数,但恕我直言,可能第一次尝试略高一点) …