6

問題: express ['static']行をコメントアウトすると、コードは完全に実行されます。これを含める(または順序を変更する)と、応答する前にアプリがしばらくハングします。

再作成するには: アプリを実行し、ブラウザーをロードして、127.0.0.1:51783に移動します。ページを常に更新する(またはcurlを使用する)と、コンソールから次のような出力が表示されます。

GET / 1 ms

次に、タイムアウトが発生し、15個のリクエストが送信されると、サーバーが応答しなくなり、次のようになります。

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);
4

1 に答える 1

-2

その http 要求について、正しくない点があります。この種のものにはrequestモジュールを使用することをお勧めします。どちらの方法でもこれは機能します:

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);
于 2012-06-03T11:51:02.530 に答える