【发布时间】:2014-04-05 18:19:45
【问题描述】:
我正在尝试将网络速度测试从 javascript 移植到在 Android 下运行的 java。加快测试工作的方法是点击 CGI 并请求给定数量的数据,并计时数据传输所需的时间。请求的数量会动态更改,以提供相对恒定的更新率。
但是当我尝试在 Android 下执行此操作时,我发现响应所需的时间似乎与请求的数据量不成正比。我正在做这样的事情:
final HttpParams params = new BasicHttpParams();
HttpClient httpclient = new DefaultHttpClient(ccm,params);
URI url;
try {
url = new URI("https://myserver.com/randomfile.php?pages=250");
} catch (Exception e) {
return -1;
}
HttpParams p = httpclient.getParams();
int timeout = 5000;
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, timeout);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout);
HttpGet request = new HttpGet();
request.setURI(url);
try {
long t0,t1,dt;
int rc;
t0 = java.lang.System.currentTimeMillis();
HttpResponse response = httpclient.execute(request);
t1 = java.lang.System.currentTimeMillis();
dt=t1-t0;
rc=response.getStatusLine().getStatusCode();
Log.d(logtag,"Get response code="+rc+",t="+dt);
} catch (Exception e) {
return -1;
}
据此,我猜想httpclient.execute 的调用可能会在它看到标头中的响应后立即返回,但在所有数据传输之前。我正在寻找知道何时完全接收数据所需的最少工作量。我不在乎数据是什么(我很乐意把它扔掉,它只是随机字节),如果可能的话,我不想浪费额外的时间来处理它,以避免扭曲报告的传输率。
我需要做的最低限度是什么?
此外,在设置呼叫时似乎有一些额外的开销。例如,如果我尝试读取 1MB 的 4096 字节,我会看到大约 500 毫秒的延迟。我不确定这个额外的延迟是从哪里来的;有什么办法可以摆脱它,因为这会导致结果的偏差远远超过从缓冲区中提取数据的几毫秒。
【问题讨论】:
标签: java android performance http get