2012-05-29 28 views
6

Il problema: Se commento la linea espressa ['statico'], il codice funziona perfettamente. Se lo includo (o cambi l'ordine), l'app si blocca per un po 'prima di rispondere.nodejs si blocca con file statici rapidi

ricreare: eseguire l'applicazione, caricare un browser e andare a 127.0.0.1:51783 Aggiornare la pagina costantemente (o usare curl), la console vi darà un output simile a:

GET/1 ms 

Poi, quando i calci di timeout in e le 15 richieste vengono inviate, il server non risponde e si ottiene il seguente:

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

Ho lo stesso identico problema. Supponevo che provenisse da un altro pezzo di middleware, ma ora lo ho isolato per connect.static. Hai qualche fortuna a risolvere questo alla fine, Chillbo? –

+0

Abbiamo anche questo problema. –

risposta

-2

C'è qualcosa che non va su tale richiesta http. Raccomando di usare il modulo request per questo genere di cose. In entrambi i casi ciò funziona:

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

Questa risposta non risponde al problema. –

+1

Lo fa un po '. Sono arrivato qui perché stavo avendo un problema con express.static, http-proxy e http.request. Passando da http.request alla libreria delle richieste è stato risolto il problema. – sheldonh