Есть ли способ выяснить время загрузки контента в OkHttp? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь рассчитать пропускную способность сети в моем приложении для 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, или это вообще невозможно.

Спасибо

1 Ответ

0 голосов
/ 21 мая 2019

Посмотрите на OkHttp EventListener , который запускается для многих интересных событий в вашем HTTP-вызове.Вы можете использовать его, если хотите, или перехватчик, который может записывать системные часы, когда происходит что-то интересное.

...