1

我正在使用 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”(或者,过了一会儿,“错误:此套接字已关闭。 ") 来自服务器端和来自客户端的“套接字挂断”。

4

0 回答 0