2011-10-19 9 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"); 

Hola a todos. Estoy atascado con este código. Cada vez que llamo 11 veces la misma solicitud, nodejs deja de responder y ni siquiera registra "Nueva solicitud:" + request.url. ¿Alguien tiene una idea de lo que está pasando?NodeJS deja de responder después de 11 solicitudes

Muchas gracias.

+0

No veo nada en esta parte del código, pero eso es realmente ineficiente. Debería usar un hash en lugar de iterar una matriz para decidir si una acción coincide - ¡es O (1) en lugar de O (n)! – Stephen

+0

Gracias por su respuesta rápida. De hecho, podría ser mucho más eficiente. Pero no es una prioridad por el momento. Solo necesito un servidor "estable" y realmente no entiendo este comportamiento (ningún error del servidor). – Elendir

+0

No hay nada de malo con este código que pueda ver - Buscaría problemas en el manejo de su BD o en el manejo de los emparejamientos ... – Stephen

Respuesta

2

Disculpe la tardanza en volver. Encontré cuál era el problema, pero no lo entiendo completamente. En el bucle de conexión, estaba usando funciones que en realidad solo simulaban valores (normalmente capturados por una solicitud). Este fue el problema. Si no emite ninguna solicitud de base de datos en la pg.connect y lo repite, parece que las conexiones no se cierran correctamente. Entonces el grupo de conexiones aparentemente se rompe. Espero haber sido lo suficientemente claro.

De todos modos, gracias por su ayuda.

+0

Tenga en cuenta que el mensaje de 'sys.puts' puede ser incorrecto: se garantiza que el servidor escuchará una vez que se active la función de devolución de llamada (opcional) para 'escuchar'. Ver: http://nodejs.org/docs/latest/api/http.html#server.listen – Gijs

+0

No sabía .listen era asíncrono, gracias por la sugerencia. – Elendir

0

Creo que el problema es la llamada asincrónica "pg.connect" en un bucle for. Pruebe este módulo js async

Cuestiones relacionadas