J'ai lu toutes les questions liées sur SO et GitHub à propos de cette erreur et aucune d'entre elles ne semble résoudre cette situation.
Quand je lance le code suivant:
response = await axios.get('http://localhost:8082/panda, {
httpAgent: new http.Agent({ keepAlive: true, keepAliveMsecs: 10000 })
});
Je reçois l'erreur suivante:
{ Error: socket hang up
at createHangUpError (_http_client.js:345:15)
at Socket.socketOnEnd (_http_client.js:437:23)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9) code: 'ECONNRESET' }
{ Error: read ECONNRESET
at _errnoException (util.js:1019:11)
at TCP.onread (net.js:608:25)
code: 'ECONNRESET',
errno: 'ECONNRESET',
syscall: 'read',
etc...
Il n'y a pas de trace de pile au-delà de l'appel onread
. Il est donc difficile de savoir comment obtenir des informations supplémentaires au-delà du code d'erreur ECONNRESET
(-54) transmis à la méthode onread
dans net.js.
Ce problème se produit avec chaque demande - il n'est pas intermittent.
Quelques observations:
Voici la partie intéressante - Je ne peux sembler reproduire ce problème de manière fiable que lorsque j'héberge le serveur localement . Je peux atteindre l'instance de dev ou exécuter le serveur dans vagrant, via un conteneur de docker, sans problème.
J'utilise macOS Sierra 10.12.6 si cela fait une différence. Le serveur est écrit en Java et utilise le framework Spring. Voici la configuration RestTemplate
que j'utilise pour les appels HTTP:
@Bean
public RestTemplate restTemplate() {
//request timeout
int timeout = 5000;
//Connection Pooling factory with timeouts to prevent disastrous request responses
HttpComponentsClientHttpRequestFactory cf = new HttpComponentsClientHttpRequestFactory();
cf.setReadTimeout(timeout);
cf.setConnectTimeout(timeout);
cf.setConnectionRequestTimeout(timeout);
return new RestTemplate(cf);
}
J'ai essayé de déconner avec ces paramètres sans succès.
Des idées?
Ce problème connu de NodeJS a été résolu. Veuillez consulter http.Agent: les sockets inactifs jettent ECONNRESET non géré pour plus de détails.
Vérifiez également que vous avez activé les paramètres de sécurité appropriés lorsque ouverture d’un port sur MacOS.