web-dev-qa-db-fra.com

Obtention de «Java.io.IOException: une connexion existante a été fermée de force par l'hôte distant»

Je fais un appel de repos à IBM Cloud BPM. Parfois, les appels fonctionnent correctement, mais parfois, ils donnent l'erreur suivante.

Java.io.IOException: An existing connection was forcibly closed by the remote Host.

Java.io.IOException: An existing connection was forcibly closed by the remote Host
    at Sun.nio.ch.SocketDispatcher.read0(Native Method)
    at Sun.nio.ch.SocketDispatcher.read(SocketDispatcher.Java:43)
    at Sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.Java:223)

Quelqu'un peut-il m'aider à résoudre ce problème?.

Toute aide est grandement appréciée.

8
Rajesh Kohir

Un tel comportement pourrait être expliqué si le client HTTP que vous utilisez ouvre connexions persistantes au serveur et que le serveur les arrête occasionnellement.

Normalement, la connexion à un serveur HTTP est fermée après chaque réponse. Avec HTTP " keep-alive " vous gardez la connexion sous-jacente TCP ouverte) jusqu'à ce que certains critères soient remplis. Quelles sont ces conditions? are dépend du serveur, qui est libre de fermer la connexion après un timeout ou un nombre de requêtes arbitraires (tant qu'il renvoie la réponse à la requête en cours).

Lorsque le serveur ferme une telle connexion, le client la rouvre généralement à nouveau et, selon l'implémentation, peut lever une exception ou afficher un avertissement.

Par exemple, Vert.x HttpClient (qui ouvre les connexions persistantes par défaut) lance également ...

Java.io.IOException: An existing connection was forcibly closed by the remote Host

... lorsque le serveur les résilie.

9
curd0