【发布时间】:2013-06-26 01:57:05
【问题描述】:
我正在做一些负载测试并编写节点脚本来做到这一点。我的结果很差,这让我吓坏了,直到我意识到我的测试代码是罪魁祸首。我平均每秒大约 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 中运行它可以让我每秒收到大约 250 个请求,这对于单个节点来说似乎更合理。虽然浏览器确实很快崩溃了。
for(var i = 0; i < 1000000; i++)
{
$.get('/service', {index:i},function(result){}).error(
function()
{
out.append('fail ');
}
);
}
【问题讨论】:
-
你有什么代码来启动这些请求? Node 并不是一种编写基准测试的特别好的语言。尽管您尝试异步发出请求,但内部事情很可能非常同步地排列。参考我的例子。
标签: javascript node.js http load-testing