在 Android 上使用 okhttp eventListener 测量下载时间时出现意外行为

Unexpected behavior while measuring download time using okhttp eventListener on Android

这个问题是https://github.com/square/okhttp/issues/6991

的延续

希望大家都好。我正在使用 okhttp 版本 4.3.1。我正在尝试测量文件的下载时间。为此,我使用了以下代码:

val okHttpClientBuilder = OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.MINUTES) // connect timeout
                .writeTimeout(5, TimeUnit.MINUTES) // write timeout
                .readTimeout(5, TimeUnit.MINUTES)

                .eventListener(object : EventListener() {
                    override fun callStart(call: Call) {
                        val callTimeEnd = System.currentTimeMillis()
                        Log.v(TAG, "callTimeEnd: $callTimeEnd")
                    }

                    override fun callEnd(call: Call) {
                        val callTimeStart = System.currentTimeMillis()
                        Log.v(TAG, "callTimeEnd: $callTimeEnd")
                    }
                })

它记录了以下时间戳:

呼叫开始: 1641622023750

通话结束:1641622031159

callEnd - callStart = ~7.4seconds。我的设备 (Android 9.0) 的下载速度为 5 Mega bits per second。文件大小为 25 Mega Bytes。理想情况下,下载时间应为 ~40 seconds。我是不是遗漏了什么,或者图书馆在幕后做了什么?

此外,另一台下载速度为 20 Mega bits per second 的设备 (Android 8.0) 正在 ~ 10 seconds 下载相同的文件,即比 Android 9.0 设备花费的时间更长。任何指针将不胜感激。

问题出在设备所连接的网络上。我在 WAN 端口上应用了速率限制,但服务器通过 ethernet 连接到路由器,客户端通过 Wifi 连接,因此,文件使用 local network 在高带宽上运行,即路由器在 150 Mbps 上运行,慢速移动设备是 65 Mbps,而快速是 144 Mbps,结果是下载速度慢和速度快的时间分别是 ~5 seconds~3 seconds。我将服务器移至 WAN 端口,它提供了所需的结果,即,将慢速设备 rate limit 设置为 5 Mbps,并在 ~43 seconds 中下载了 25 Mega bytes 文件。