Первый запрос на модификацию занимает точное время ожидания OkHttpClient

Я использую Retrofit и OkHttpClient для создания Rest API на Android.

Некоторое время назад я заметил, что самый первый запрос, сделанный API, всегда обрабатывается дольше, чем все остальные... В начале мне было все равно, потому что это было приемлемое время.

Но вдруг время запроса подскочило до 60 секунд

Все это время является ненужной клиентской стороной, так как при мониторинге сервера я вижу, что время обработки занимает менее 1 секунды...

Мне было интересно, какие изменения я внес, что может вызвать такое сильное влияние, затем я понял, что изменил тайм-аут соединения OkHttp.

Я изменил значение с 10 до 60 секунд только для тестирования...

Я провел несколько экспериментов, устанавливая connectTimeout для многих других значений, и ВСЕГДА первый запрос занимает время, превышающее время ожидания.

Кто-нибудь знает, что может вызвать это странное поведение? как это решить?

PS. Мне нужно было проверить API на рабочем столе, и эта проблема не возникала, я имею в виду, что это происходит только на устройствах Android [я пробовал несколько], в чем причина?

1 ответ

https://medium.com/inloopx/okhttp-is-quietly-retrying-requests-is-your-api-ready-19489ef35ace

Скорее всего, произойдет сбой при первых нескольких запросах и истечет время ожидания. OkHTTP автоматически повторяет попытку.

builder.retryOnConnectionFailure(ложь);

Попробуйте отключить автоповтор и посмотрите, что произойдет.

https://www.reddit.com/r/gfycat/comments/5y2dkm/psa_for_android_devs_how_to_work_around_ipv6/

Вероятно, это проблема ipv4 vs ipv6. Этот код отдает приоритет адресам IPv4.

Вы можете настроить EventListener в вашем OkHttpClient и используйте это, чтобы увидеть, как тратится время.

Другие вопросы по тегам