2011-10-19 3 views
6
http.createServer(function(request, response) { 
console.log("New request :"+request.url); 
var found = false; 
for(var i= 0; i < requests.length; i++){ 
    match = requests[i]; 
    if(match.method == request.method && request.url.match(match.regexp)) 
    { 
     console.log("Matched request: "+match.url); 
     pg.connect(databaseUrl, function(error, client) { 
      if(error) 
       processError(response, error); 
      else 
       match.action(client, request, response); 
     }); 
     found = true; 
     break; 
    } 
} 
if(!found) 
    processError(response, "Request url does not exist: "+request.url); 
}).listen(3000); 
sys.puts("Server running... waiting for requests"); 

Bonjour à tous. Je suis coincé avec ce code. Chaque fois que j'appelle 11 fois la même requête, nodejs cesse de répondre et ne consigne même pas "New request:" + request.url. Quelqu'un a une idée de ce qui se passe?NodeJS cesse de répondre après 11 demandes

Merci beaucoup.

+0

Je ne vois rien dans cette partie du code mais c'est vraiment inefficace. Vous devriez utiliser un hachage plutôt que d'itérer un tableau pour décider si une action correspond - son O (1) au lieu de O (n)! – Stephen

+0

Merci pour votre réponse rapide. En effet, cela pourrait être beaucoup plus efficace. Mais ce n'est pas une priorité pour le moment. J'ai juste besoin d'un serveur "stable" et ne comprends vraiment pas ce comportement (pas d'erreur du serveur). – Elendir

+0

Il n'y a rien de mal avec ce code que je peux voir - je chercherais des problèmes dans votre manipulation de DB ou la manipulation de match ... – Stephen

Répondre

2

Désolé pour le retour tardif. J'ai trouvé quel était le problème mais je ne le comprends pas complètement. Dans la boucle de connexion, j'utilisais des fonctions qui ne faisaient que simuler des valeurs (normalement capturées par une requête). C'était le problème. Si vous n'émettez aucune requête de base de données dans le fichier pg.connect et que vous la bouclez, il semble que les connexions ne se ferment pas correctement. Ainsi, le pool de connexions se brise apparemment. J'espère avoir été assez clair.

En tout cas merci pour votre aide.

+0

Notez que le message de 'sys.puts' peut être incorrect - le serveur est seulement garanti d'être à l'écoute une fois que la fonction de rappel (facultatif) de' listen' se déclenche. Voir: http://nodejs.org/docs/latest/api/http.html#server.listen – Gijs

+0

Ne savait pas .listen était asynchrone, merci pour le conseil. – Elendir

0

Je pense que le problème est l'appel asynchrone "pg.connect" dans une boucle for. Essayez ce module js async

Questions connexes