【问题标题】:Reliably timing HttpClient Get request可靠定时 HttpClient 获取请求
【发布时间】: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


    【解决方案1】:

    调用getContent()得到的InputStreamskip()函数可以直接跳过返回的内容:

    InputStream instr;
    t0 = java.lang.System.currentTimeMillis();
    HttpResponse response = httpclient.execute(request);
    rc=response.getStatusLine().getStatusCode();
    instr=response.getEntity().getContent();
    instr.skip(250*4096);
    t1 = java.lang.System.currentTimeMillis();
    

    就调用开销而言,较大的传输只占总时间的较小部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2010-11-02
      • 2021-12-30
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多