Node.js - 运行多个请求时写入EPIPE错误

时间:2012-12-17 12:05:32

标签: node.js http load-testing stress-testing epipe

我正在使用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挂断“从客户端。

0 个答案:

没有答案