OkHttp ведет себя как следует. A SocketTimeoutException
происходит, когда серверу требуется больше времени для ответа, чем клиент готов ждать, и он просто сдаётся. Время ожидания чтения по умолчанию составляет 10 секунд с OkHttp 2.5 (и включая новый 3.0), что объясняет, почему вы получаете исключение через 15 секунд.
Вы можете установить свои собственные интервалы времени, чтобы ваш сервер достаточно времени, чтобы ответить:
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(20, TimeUnit.SECONDS); // connect timeout
client.setReadTimeout(20, TimeUnit.SECONDS); // socket timeout
Обратите внимание, что это не ручка исключение, оно все равно будет выброшен, если клиент Безразлично» t получить ответ в x
секунд. Я бы наверняка поймал исключение. Это было бы подходящим местом для повторной логики.
Поскольку вы используете RxJava с Модернизированный, вы можете просто добавить retry/retryWhen
к вашей сети, чтобы поймать и обработать SocketTimeoutException
ошибки, и, возможно, даже смешивать в exponential backoff.
Я получаю застревание из-за такого поведения okhttp ... это там любой способ понять это. –
Решена ли ваша проблема – mjosh