有没有办法计算出 OkHttp 中的内容下载时间?
Is there a way to figure out content download time in OkHttp?
我正在尝试计算我的 Android 应用程序中的网络带宽。我如何使用 OkHttp3 库计算响应下载时间(不包括我的 HTTP 请求的周转时间)?
在我的应用程序级拦截器中,我可以访问 Response 并且我看到 sentRequestAtMillis
和 receivedResponseAtMillis
等属性。而且我认为以下等式对我的情况不准确,因为:
receivedResponseAtMillis - sentRequestAtMillis = requestSendTime + Server Latency + responseDownloadTime
所以我想弄清楚是否有一种方法可以将服务器延迟和 requestSendTime 排除在这个等式之外,并且可以获得 responseDownloadTime?
我尝试在调用 chain.proceed(request)
后立即获取时间戳:
Request request = chain.request();
Response response = chain.proceed(request);
String url = request.url().toString();
long currentTimeMillis = System.currentTimeMillis();
double contentDownloadTimeInSecs = (currentTimeMillis - response.receivedResponseAtMillis()) / 1000.0;
double requestRoundTripTimeInSecs = (currentTimeMillis - response.sentRequestAtMillis()) / 1000.0;
}
我想到这个只是因为在
的文档中
receivedResponseAtMillis()
https://square.github.io/okhttp/3.x/okhttp/okhttp3/Response.html#receivedResponseAtMillis--
我读到它是从网络收到响应的 headers 时立即采取的时间戳。
所以也许减去我在上面的代码片段中显示的方式,我可以获得响应下载时间?
当我使用 NetworkLinkConditioner 等节流软件节流我的应用程序时。基于我在上面使用的机制,我看到了不一致的值。所以不太确定这是否是实现此目标的正确方法。
请帮助验证我的理论,如果有人能谈谈如何使用 OkHttp 捕获 contentDownloadTime 或者它是否根本不可能,我将不胜感激。
谢谢
看看 OkHttp 的 EventListener,它会在您的 HTTP 调用中触发许多有趣的事件。如果你喜欢可以使用它,或者一个拦截器,这两者都可以在发生感兴趣的事情时记录系统时钟。
我正在尝试计算我的 Android 应用程序中的网络带宽。我如何使用 OkHttp3 库计算响应下载时间(不包括我的 HTTP 请求的周转时间)?
在我的应用程序级拦截器中,我可以访问 Response 并且我看到 sentRequestAtMillis
和 receivedResponseAtMillis
等属性。而且我认为以下等式对我的情况不准确,因为:
receivedResponseAtMillis - sentRequestAtMillis = requestSendTime + Server Latency + responseDownloadTime
所以我想弄清楚是否有一种方法可以将服务器延迟和 requestSendTime 排除在这个等式之外,并且可以获得 responseDownloadTime?
我尝试在调用 chain.proceed(request)
后立即获取时间戳:
Request request = chain.request();
Response response = chain.proceed(request);
String url = request.url().toString();
long currentTimeMillis = System.currentTimeMillis();
double contentDownloadTimeInSecs = (currentTimeMillis - response.receivedResponseAtMillis()) / 1000.0;
double requestRoundTripTimeInSecs = (currentTimeMillis - response.sentRequestAtMillis()) / 1000.0;
}
我想到这个只是因为在
的文档中
receivedResponseAtMillis()
https://square.github.io/okhttp/3.x/okhttp/okhttp3/Response.html#receivedResponseAtMillis--
我读到它是从网络收到响应的 headers 时立即采取的时间戳。
所以也许减去我在上面的代码片段中显示的方式,我可以获得响应下载时间?
当我使用 NetworkLinkConditioner 等节流软件节流我的应用程序时。基于我在上面使用的机制,我看到了不一致的值。所以不太确定这是否是实现此目标的正确方法。
请帮助验证我的理论,如果有人能谈谈如何使用 OkHttp 捕获 contentDownloadTime 或者它是否根本不可能,我将不胜感激。
谢谢
看看 OkHttp 的 EventListener,它会在您的 HTTP 调用中触发许多有趣的事件。如果你喜欢可以使用它,或者一个拦截器,这两者都可以在发生感兴趣的事情时记录系统时钟。