在OkHttp中有没有一种方法可以确定内容下载时间?

4
我正在尝试在我的Android应用程序中计算网络带宽。如何使用OkHttp3库找出响应下载时间(不包括我的HTTP请求的往返时间)?
在我的应用程序级拦截器中,我可以访问Response,并查看类似于sentRequestAtMillis和receivedResponseAtMillis的属性。我认为以下等式对于我的情况并不准确:
receivedResponseAtMillis - sentRequestAtMillis = requestSendTime + Server Latency + 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;


    }

我考虑这个问题,是因为在https://square.github.io/okhttp/3.x/okhttp/okhttp3/Response.html#receivedResponseAtMillis--的文档中, receivedResponseAtMillis()被描述成从网络接收到响应header时立即获取的时间戳。因此,也许通过上面代码片段中所展示的方式进行减法计算,可以得到响应下载时间?
当我使用NetworkLinkConditioner等软件来限制我的应用程序时,我会根据我上述机制的不同而看到不一致的值。因此,我不确定这是否是实现此目的的正确方法。
请帮忙验证我的理论,如果有人知道如何使用OkHttp捕获contentDownloadTime(内容下载时间),或者根本不可能实现,请告诉我,我将不胜感激。
谢谢。
1个回答

1

看一下OkHttp的EventListener,它会在HTTP调用中触发许多有趣的事件。如果你喜欢,你可以使用它或拦截器,两者都可以在发生感兴趣的事情时记录系统时钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接