2015-12-21 7 views
2

Я использую Okhttp 2.5, 2.6, 2.7 с RxJava и Retrofit 2. У меня возникла загадочная проблема с вызовом okhttp. Когда я перезвонил, меня перехватил мой перехватчик Okhttp, а NetworkInterceptor вызвал через 4-5 секунд. Иногда его более 15 секунд, и приводит SocketTimeoutExcpetion.Загадочная проблема с вызовом okhttp (SocketTimeException)

Пожалуйста, предложите, что делать, чтобы решить эту проблему. Есть ли какой-либо поток, блокирующий мой вызов, выполняется?

+0

Я получаю застревание из-за такого поведения okhttp ... это там любой способ понять это. –

+0

Решена ли ваша проблема – mjosh

ответ

1

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.

+0

Рот, спасибо за ответ. Я использую вашу указанную конфигурацию, а также retryWhen. Но проблема в моем сетевом подключении, и сервер стабилен, и я получаю сокет. Я также искал об этом, некоторые сообщения предлагают проблему с ipv6, но наш сервер ipv4. Итак, я не уверен, что это за проблема. Вы когда-нибудь сталкивались с такой проблемой? Мои пользователи также сталкиваются с тем же. –