我正在使用 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,服务器几乎崩溃 - 在一千个请求中,只有 ~160 个被正确处理。从测试人员的角度来看,
我正在使用 fs.createReadStream().pipe() (使用适当的参数,并输入 {end: false} )通过套接字发送数据。另外,我在超时(两秒不活动)时调用socket.destroy()(其中socket是net.createServer的回调函数中接收的参数),如果我收到“Connection:close”作为标题,则调用socket.end() HTTP 请求。
有什么帮助吗?我什么都试过了;切换到 http.get(),在创建服务器时放置 {allowHalfOpen: true} 等等 - 但我仍然收到“错误:写入 EPIPE”(或者,过了一会儿,“错误:此套接字已关闭。 ") 来自服务器端和来自客户端的“套接字挂断”。