Я пытаюсь рассчитать пропускную способность сети в моем приложении для Android. Как определить время загрузки ответа (не включая время оборота для моего HTTP-запроса) с помощью библиотеки OkHttp3?
В моем перехватчике уровня приложения у меня есть доступ к 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--
Я прочитал, что это метка времени, которая берется сразу после получения заголовков ответа из сети.
Так что, возможно, вычтя то, что я показал в приведенном выше фрагменте кода, я могу получить время загрузки ответа?
Когда я регулирую свое приложение с помощью программ регулирования, таких как NetworkLinkConditioner. Я вижу противоречивые значения, основанные на механизме, который я использую выше. Так что не совсем уверен, что это правильный путь для достижения этого.
Пожалуйста, помогите в проверке моей теории, я был бы очень признателен, если бы кто-нибудь мог рассказать о том, как захватить contentDownloadTime с помощью OkHttp, или это вообще невозможно.
Спасибо