2015-12-21 4 views
2

J'utilise Okhttp 2.5, 2.6, 2.7 avec RxJava et Retrofit 2. J'ai eu un problème mystérieux avec l'appel okhttp. Quand j'ai fait un appel avec retrofit, mon intercepteur Okhttp est appelé immédiatement tandis que NetworkInterceptor l'appelle après 4 à 5 secondes. Parfois, c'est plus de 15 secondes, et conduit SocketTimeoutExcpetion.Problème mystérieux avec l'appel okhttp (SocketTimeException)

S'il vous plaît suggérer, Que dois-je faire pour résoudre ce problème. Y a-t-il un thread bloquant mon appel à être exécuté?

+0

Je suis coincé à cause de ce comportement de okhttp ... il y a un moyen de le comprendre. –

+0

Est-ce votre problème résolu – mjosh

Répondre

1

OkHttp se comporte comme il se doit. Un SocketTimeoutException se produit lorsque le serveur prend plus de temps à répondre que ce que le client est prêt à attendre, et il abandonne tout simplement. Il y a un délai de lecture par défaut de 10 secondes depuis OkHttp 2.5 (et en incluant le nouveau 3.0), ce qui expliquerait pourquoi vous obtenez l'exception après 15 secondes.

Vous pouvez définir vos propres délais d'attente pour permettre à votre serveur suffisamment de temps pour répondre:

OkHttpClient client = new OkHttpClient(); 
client.setConnectTimeout(20, TimeUnit.SECONDS); // connect timeout 
client.setReadTimeout(20, TimeUnit.SECONDS);  // socket timeout 

Notez que cela ne poignée l'exception, il sera toujours jeté si le client n » t recevoir une réponse en x secondes maintenant. Je ferais en sorte d'attraper l'exception. Ce serait un endroit approprié pour avoir votre nouvelle tentative.


Puisque vous utilisez RxJava avec Retrofit, vous pouvez simplement ajouter retry/retryWhen à votre chaîne pour capturer et manipuler SocketTimeoutException erreurs, et peut-être mélanger même dans exponential backoff.

+0

Roth, merci de répondre. J'utilise votre configuration mentionnée, aussi retryWhen. Mais, le problème est ma connexion réseau et le serveur est stable et je reçois sockettimeout. J'ai aussi cherché à ce sujet, certains post suggèrent son problème ipv6, mais notre serveur est ipv4. Donc, je ne suis pas sûr de quel genre de problème est-ce. Avez-vous déjà fait face à ce genre de problème? Mes utilisateurs font également face à la même chose. –