Проблема с беззвучной повторной попыткой okhttp при сбое соединения

#android #timeout #okhttp3

#Android #тайм-аут #okhttp3

Вопрос:

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

введите описание изображения здесь
введите описание изображения здесь

На что они жалуются, так это на то, что данные загружаются на сервер, но мобильный телефон по-прежнему отображается как не загруженный. Я немного исследовал и обнаружил, что OkHttp повторяет запросы при сбое соединения, и предполагаю, что это связано с этой темой. Я не могу создать обращение во время отладки приложения. Я попытался подключиться к 10.10.10.1, он получает тайм-аут сокета, но, похоже, okhttp не повторяет этот запрос. Он просто возвращается в эту строку if (!streamAllocation.hasMoreRoutes()) return false; (okhttp v3.12.1). Я не вижу никаких журналов при повторных попытках в logcat или stetho. Как воспроизвести этот случай? Должен ли OkHttp повторить попытку в этом случае? Поможет ли отключение повторной попытки в этом случае?

Согласно этой статье https://medium.com/inloopx/okhttp-is-quietly-retrying-requests-is-your-api-ready-19489ef35ace

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

Ответ №1:

Мне удалось воспроизвести случай на основе стандартного теста okhttp. Вот тест https://gist.github.com/androideveloper/b411d9e90cb8ad430148a906890d0c90 . Он повторяет попытку 2 раза. Журналы доступны, если перехватчик журналов установлен в качестве сетевого перехватчика.