Node.JS Http请求范围

时间:2014-06-01 13:21:44

标签: node.js http

我刚刚进入Node并编写一个简单的HTTP负载测试器。我不确定为什么以下代码总是以线性方式报告每个Web请求时间。例如,我回过头来看,所有10个HTTP请求都比之前的要长一些。所以控制台看起来像这样:

在0.138秒内发送。

节点0在0秒,302毫秒内响应。

节点1在0秒内响应,364毫秒。

节点4在0秒,379毫秒内响应。

节点3在0秒,397毫秒内响应。

节点2在0秒内响应,410毫秒。

节点6在0秒内响应,413毫秒。

节点5在0秒内响应,429毫秒。

节点8在0秒,434毫秒内响应。

节点7在0秒,446毫秒内响应。

节点9在0秒内响应,454毫秒。

在我看来,我认为Node应该在其中一个请求得到响应时执行响应事件。任何人都可以看到我为什么会看到这样的时间?

这是代码(从Raspberry Pi运行,我的Mac也报告相同的线性时序):

var http = require('http');

var workersFinished = 0;
var workersSent = 0;
var workersErrored = 0;
var workerTimers = [];

process.stdout.write('\u001B[2J\u001B[0;0f');

try
{   
    http.globalAgent.maxSockets = 5000;

    var options = {
      host: '192.168.1.88',
      port: 90,
      path: '/xampp'
    };

    var callback = function(response) {
        var buffer = '';

        response.setEncoding('utf8');

        response.on('data', function(chunk) {
            buffer += chunk;
        });

        response.on('end', function() {
            //console.log('Headers: ' + JSON.stringify(resp.headers));
            //console.log('Received bytes: ' + buffer.length);
            //console.log('Status Code: ' + response.statusCode);
            //http.request(options, callback).end();
        });
    };

    function doRequest(id, options, callback) {

        var request = http.request(options, callback);

        request.on('response', function(r) {

            var elapsed = process.hrtime(workerTimers[id]);

            console.log('Node ' + id + ' responded in ' + elapsed[0] + ' s, ' + (elapsed[1] / 1000000).toFixed(0) + ' ms.');

            //doRequest(id, options, callback); // Send this worker off again.

            workersFinished++;
        });

        request.on('error', function(error) {
            workersErrored++;
        });

        request.end();
        workerTimers[id] = process.hrtime();
    }

    var start = process.hrtime();

    for (var i = 0; i < 10; i++) {
        doRequest(i, options, callback);
        workersSent++;
    }

    var diff = process.hrtime(start);
    var elapsedMs = diff[1] / 1000000;
    var elapsedSeconds = diff[0];

    console.log("Sent in " + elapsedSeconds + "." + elapsedMs.toFixed(0) + " seconds.");
}
catch (err) {
    console.log(err.message);
}

0 个答案:

没有答案