我正在使用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(当前最新版本)上运行时,对于大于20的'numOfRequest',服务器几乎崩溃 - 在一千个请求中,只有~160正确处理。从测试者方面来看,
我正在使用fs.createReadStream()。pipe()(使用适当的参数,并输入{end:false})通过套接字发送数据。此外,我在超时(两秒不活动)时调用socket.destroy()(其中socket是net.createServer的回调函数中接收的参数),如果我收到“Connection:close”作为标题,则调用socket.end() HTTP请求。
有任何帮助吗?我已经尝试了一切;切换到http.get(),在创建服务器时放置{allowHalfOpen:true}等等 - 但仍然,我得到“错误:写EPIPE”(或者,一段时间后,“错误:此套接字已关闭。 “)从服务器端和”socket挂断“从客户端。