私はいくつかの負荷テストを行っており、それを行うためのノード スクリプトを作成しています。私のテスト コードが原因であることに気付くまで、私の結果はかなり貧弱でした。私は、平均して 1 秒あたり約 30 ~ 50 件のリクエスト (サーバーへの) を行っており、以下のコードを使用してリクエストを作成しています。30-50 は非常に低いようです。これは 4 コアの Mac 上にあります。これは正しいですか、それとも私は何か完全に間違っていますか?
var http = require('http');
var sys = require('util');
http.globalAgent.maxSockets = 100000;
var http = require('http');
http.globalAgent.maxSockets = 100000;
var Request = function (request, params, host, port, completionFn, errorFn)
{
if(!params)
params = '';
if(typeof(errorFn) != 'function')
{
errorFn = function (e)
{
console.log('request error!? ' + e.message);
process.exit();
}
}
var paramsStr = '';
for(var item in params)
paramsStr += '&' + item + '=' + encodeURI(params[item]);
var path = '/' + request;
if(paramsStr != '')
path += '?' + paramsStr.substr(1);
var options =
{
host: host,
port: port,
path: path,
agent: false
};
http.request(options,
function (response)
{
var responseData = '';
response.on('data',
function (chunk)
{
responseData += chunk;
}
).on('end',
function ()
{
completionFn(httpRequest.To_JSON(responseData));
}
).on('error', errorFn);
}
).on('error', errorFn).end();
};
新しい情報:
興味深いことに、これを Chrome で実行すると、1 秒あたり約 250 のリクエストが得られます。これは、単一のノードではより合理的と思われます。ブラウザはすぐにクラッシュしますが。
for(var i = 0; i < 1000000; i++)
{
$.get('/service', {index:i},function(result){}).error(
function()
{
out.append('fail ');
}
);
}