2010-05-21 4 views
1

J'essaie de fermer une socket après une connexion expire après 1000ms. Je suis capable de définir un timeout qui se déclenche après 1000ms mais je n'arrive pas à détruire le socket ... des idées?Comment fermer une socket après un délai d'expiration dans node.js?

var connection = http.createClient(80, 'localhost'); 
var request = connection.request('GET', '/somefile.xml', {'host':'localhost'}); 
var start = new Date().getTime(); 

request.socket.setTimeout(1000); 

request.socket.addListener("timeout", function() { 
    request.socket.destroy(); 
    sys.puts("socket timeout connection closed"); 
}); 

request.addListener("response", function(response) { 
    var responseBody = []; 
    response.setEncoding("utf8"); 
    response.addListener("data", function(chunk) { 
    sys.puts(chunk); 
    responseBody.push(chunk); 
    }); 

    response.addListener("end", function() { 

    }); 
}); 

request.end(); 

retours

socket timeout connection closed 
node.js:29 
    if (!x) throw new Error(msg || "assertion error"); 
       ^
Error: assertion error 
    at node.js:29:17 
    at Timer.callback (net:152:20) 
    at node.js:204:9 

Répondre

0

Vous pouvez obtenir de meilleures réponses sur le canal IRC sur Freenode. #node.js Mais le nœud AFAIK n'est pas vraiment conçu pour annuler quelque chose à mi-chemin. La plupart du temps, les gens la quittent simplement car, dans node.js, il n'y a pas d'E/S bloquantes de toute façon. Je suis d'accord cependant, qu'il devrait y avoir un moyen d'annuler quelque chose à mi-chemin, mais je ne pense pas que vous devriez jouer avec la connexion socket interne de la demande. C'est pourquoi vous avez l'abstraction http.ClientRequest pour gérer le socket pour vous. L'erreur peut être due au fait que le délai fonctionne mais que l'objet de requête ne s'attendait pas à ce que le socket soit déjà fermé.

Espérons que cela aide.

Questions connexes