node.js子进程和手动分离进程之间的区别?

时间:2013-03-03 16:12:17

标签: javascript linux node.js websocket socket.io

我正在尝试测试socket.io服务器的响应时间。所以socket.io服务器只是回显一条消息,测试文件发送消息并记录发送和获取回声之间所需的时间。为了模拟多个客户端,我在manager文件中使用child_process多次启动此测试文件。

奇怪的是,我只用一个测试文件得到0.2的响应时间。当我启动管理器生成4个以上的客户端时,它会达到1.3,当我在两个独立的终端中启动两个管理器时,每个客户端有4个客户端,最多可达3个。但是,当我只启动一个有10个客户端的管理员时(甚至可以达到某个客户端)疯狂如1000)结果保持在1以下。

再次证明这一点:

manager.js 4    -> spawns 4 childs
manager.js 4    -> spawn 4 childs
test.js         -> shows around 3 avg. response time

manager.js 10   -> spawns 10 childs
test.js         -> shows around 0.5 avg. response time

那么,为什么多次单独调用以生成4个子节点,然后一次调用多个子节点呢?

这是我的经理文件产生孩子:

var count = process.argv[2] || 1;
console.log("generating " + count + " childs");

for (var i = 0; i < count; i++){
    var childProcess = require('child_process');
    childProcess.exec('node test.js', function (error, stdout, stderr) {
       if (error) {
         console.log(error.stack);
         console.log('Error code: '+error.code);
         console.log('Signal received: '+error.signal);
       }
       console.log('Child Process STDOUT: '+stdout);
       console.log('Child Process STDERR: '+stderr);
     });
}

这是我的测试文件,测试最后一秒的平均响应时间:

var io = require('socket.io-client');
var rtts = [];

var socket = io.connect('http://localhost:3000');
socket.emit('roundtrip', { time: new Date().getTime() });
socket.on('roundtrip', function (data) {

var roundtripTime = new Date().getTime() - data.time;
rtts.push(roundtripTime);

socket.emit('roundtrip', { time: new Date().getTime() });
});

setInterval(function(){
    avgRTT = 0;
    for (var i = 0; i < rtts.length; i++){
        avgRTT += rtts[i];
    }
    avgRTT = avgRTT / rtts.length;
    console.log("AVG RTT: " + avgRTT);
    rtts = [];
}, 1000);

我在linux mint 64 bit上运行它。

0 个答案:

没有答案