如何在android中获取HTTP请求/响应时间

Nit*_*ani 3 android okhttp

我需要记录这些:

  1. DNS时间
  2. 连接时间
  3. SSL时间
  4. 设备网络带宽
  5. 第一个字节时间
  6. 换乘时间
  7. 对象数/字节数

我正在使用 OKHttp 库来处理网络请求。

mur*_*rki 6

看看 OkHttp 的新 EventListener:https://github.com/square/okhttp/wiki/Events

它提供了一种将侦听器连接到链的每个步骤的方法,因此您可以获得如下信息:

class PrintingEventListener extends EventListener {
  private long callStartNanos;

  private void printEvent(String name) {
    long nowNanos = System.nanoTime();
    if (name.equals("callStart")) {
      callStartNanos = nowNanos;
    }
    long elapsedNanos = nowNanos - callStartNanos;
    System.out.printf("%.3f %s%n", elapsedNanos / 1000000000d, name);
  }

  @Override public void callStart(Call call) {
    printEvent("callStart");
  }

  @Override public void callEnd(Call call) {
    printEvent("callEnd");
  }

  @Override public void dnsStart(Call call, String domainName) {
    printEvent("dnsStart");
  }

  @Override public void dnsEnd(Call call, String domainName, List<InetAddress> inetAddressList) {
    printEvent("dnsEnd");
  }

  ...
}
Run Code Online (Sandbox Code Playgroud)

然后你像这样连接它:

Request request = new Request.Builder()
    .url("https://publicobject.com/helloworld.txt")
    .build();

System.out.println("REQUEST 1 (new connection)");
try (Response response = client.newCall(request).execute()) {
  // Consume and discard the response body.
  response.body().source().readByteString();
}
Run Code Online (Sandbox Code Playgroud)

这将输出以下内容:

REQUEST 1 (new connection)
0.000 callStart
0.010 dnsStart
0.017 dnsEnd
0.025 connectStart
0.117 secureConnectStart
0.586 secureConnectEnd
0.586 connectEnd
0.587 connectionAcquired
0.588 requestHeadersStart
0.590 requestHeadersEnd
0.591 responseHeadersStart
0.675 responseHeadersEnd
0.676 responseBodyStart
0.679 responseBodyEnd
0.679 connectionReleased
0.680 callEnd
Run Code Online (Sandbox Code Playgroud)