1

Node の 'net' モジュールを使用して静的 Web サーバーを作成していますが、ストレス テストを実行する際に問題が発生しました。

これは、テスト自体のコードです。

var http = require("http");
http.globalAgent.maxSockets = 100000;
var numOfRequests = 1000;

var options = {
  host: 'localhost',
  port: 9000,
  path: '/first/profile.html', 
  method: 'GET'
};



//Number of current responses.
var currResponse = 0;

//Create 1000 http requests 
for (var i = 0; i < numOfRequests; i++) {

    var req = http.request(options, function(res) {
        console.log("Got response: " + res.statusCode);
        console.log("response num: "+currResponse);
        currResponse++;

    });
    req.on('error',function(e){ console.log('some error occured: '+e.message); });
    req.end();
}

Node v. 0.8.15 (現在の最新バージョン) で実行している場合、'numOfRequest' が 20 を超えると、サーバーがほぼ崩壊し、1,000 のリクエストのうち、160 までしか正しく処理されません。テスター側から、

fs.createReadStream().pipe() (適切なパラメーターを使用し、 {end: false} を入力) を使用して、ソケット経由でデータを送信しています。また、タイムアウト (2 秒間の非アクティブ状態) 時に socket.destroy() (socket は net.createServer のコールバック関数で受け取った引数) を呼び出し、"Connection: close" をヘッダーとして受け取った場合は socket.end() を呼び出します。 HTTP リクエスト。

何か助けはありますか?私はすべてを試しました。http.get() に切り替える、サーバーを作成するときに {allowHalfOpen: true} を入れるなど - それでも、「エラー: EPIPE を書きます」(または、しばらくすると「エラー: このソケットは閉じられています。 ") はサーバー側から、"ソケット ハングアップ" はクライアント側からです。

4

0 に答える 0