nœud net socket délai d'attente de connexion
J'ai remarqué que mon nœud du serveur net.createConnection() a un très long délai d'attente avant la mise à feu d'une erreur sur certaines occasions (semble être un problème particulier avec les ports...)
j'ai essayé de vous connecter à somedomain:9000 (à l'écoute, de la connexion et fonctionne comme prévu)
et pour somedomain:1234 (même domaine, autre port, attendez environ 2 minutes jusqu'à ce que "se connecter ETIMEDOUT")
Lorsque je me connecte à les domaines inexistants, j'obtiens une erreur tout de suite, mais pas si je le connecte à inaccessible ports accessibles hôtes.
j'ai besoin de déterminer si une machine est joignable dans <1sec..
comment puis-je gérer cela? Doit y avoir un moyen de préavis d'un inaccessible port en moins de 2minutes?
au moins une sorte de dépassement de délai qui dicte l'adresse inaccessible après une quantité de temps?
Grâce
Mise à JOUR: Connexion en cours code:
this.openConnection = function() {
try {
console.log("[INFO] connecting to " + device.ip + ":" + device.port);
device.clientSocket = new net.createConnection(this.port,this.ip)
.on('connect', device.connected)
.on('data', device.inputReceived)
.on('error', function(err) {
if (err.code == "ENOTFOUND") {
console.log("[ERROR] No device found at this address!");
device.clientSocket.destroy();
return;
}
if (err.code == "ECONNREFUSED") {
console.log("[ERROR] Connection refused! Please check the IP.");
device.clientSocket.destroy();
return;
}
console.log("[CONNECTION] Unexpected error! " + err.message + " RESTARTING SERVER");
process.exit(1);
})
.on('disconnect', function() {
console.log("[CONNECTION] disconnected!");
});
} catch(err) {
console.log("[CONNECTION] connection failed! " + err);
}
};
OriginalL'auteur Paul Schneider | 2015-03-30
Vous devez vous connecter pour publier un commentaire.
Lorsque vous vous connectez, il vous suffit de définir votre propre minuterie pour quelque délai que vous voulez et si la connexion n'a pas réussi lorsque la minuterie incendies, alors il n'a pas réussi aussi vite que vous le souhaitez.
Cela pourrait être encapsulé dans une fonction unique avec un seul rappel ou le retour d'une promesse.
Basé sur votre code, voici un coup à l'ajout d'un délai d'attente (code non testé):
montrez-moi votre code de connexion où vous détecter l'échec de connexion et je peux vous montrer comment l'adapter pour ajouter votre propre minuterie.
Il n'est pas beaucoup, mais j'ai édité le code ci-dessus 🙂
J'ai ajouté une version avec un délai d'attente.
c'est une faute de frappe dans le code. Partout il est dit
clearTimeout(timeout);
, il devrait êtreclearTimeout(timer);
, j'ai corrigé le code dans ma réponse.OriginalL'auteur jfriend00