2012-05-29 14 views
6

El problema: Si comente la línea express ['static'], el código se ejecuta perfectamente. Si lo incluyo (o cambio el orden), la aplicación se cuelga por un tiempo antes de responder.nodejs se cuelga con los archivos estáticos expresos

para recrear: Ejecutar la aplicación, carga hasta un navegador e ir a 127.0.0.1:51783 Actualizar la página constantemente (o utilizar rizo), la consola le dará una salida similar a:

GET/1 ms 

Entonces, cuando se envían las patadas y tiempo de espera en las 15 solicitudes, el servidor deja de responder y se obtiene lo siguiente:

Server Now Unresponsive but requests queued 
GET/35549 ms 

app.js

var http = require('http'); 
var express = require('express'); 
var app = express.createServer(); 
app.use(express.logger({ format: '\x1b[1m:method\x1b[0m \x1b[33m:url\x1b[0m :response-time ms' })); 
app.use(express.bodyParser()); 
app.use(express['static'](__dirname + '/')); //Comment me and all works perfectly! 
app.listen(51783); 
http.globalAgent.maxSockets = 500; //doesn't help 
setTimeout(function(){ 
    console.log('Server Now Unresponsive but requests queued'); 
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].forEach(function(item){ 
    http.request({host:'http://cnn.com', port:80, path:'/null', method:'GET'}, function(res){ 
    }).on('error', function(e){}); 
    }); 

},5000); 
+0

Estoy teniendo exactamente el mismo problema. Supuse que venía de una pieza diferente de middleware pero ahora la he aislado para connect.static. ¿Tienes algo de suerte resolviendo esto al final Chillbo? –

+0

Estamos teniendo este problema también. –

Respuesta

-2

Hay algo que no está bien sobre esa petición http. Recomiendo usar el módulo request para este tipo de cosas. De cualquier manera esto funciona:

var http = require('http'); 
var express = require('express'); 
var app = express.createServer(); 

app.configure(function(){ 
    app.use(express.logger({ format: '\x1b[1m:method\x1b[0m \x1b[33m:url\x1b[0m :response-time ms' })); 
    app.use(express.bodyParser()); 
    app.use(express['static'](__dirname + '/public')); //Comment me and all works perfectly! 
}) 

app.listen(51783); 
var request = require('request'); 


setTimeout(function(){ 
    console.log('Server Now Unresponsive but requests queued'); 
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15].forEach(function(item){ 
    request('http://www.google.com', function (error, response, body) { 
     console.log("request number "+item+" received") 
    }) 
    }); 
},5000); 
+0

Esta respuesta no responde al problema. –

+1

Lo hace un poco. Llegué aquí porque estaba teniendo un problema con express.static, http-proxy y http.request. El cambio de http.request a la biblioteca de solicitudes resolvió el problema. – sheldonh

Cuestiones relacionadas