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 を書きます」(または、しばらくすると「エラー: このソケットは閉じられています。 ") はサーバー側から、"ソケット ハングアップ" はクライアント側からです。