2

我正在尝试测量我的 socket.io 服务器的响应时间。所以 socket.io 服务器只是回显一条消息,一个测试文件发送消息并记录发送和获取回显之间所需的时间。为了模拟多个客户端,我在管理器文件中使用 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 位上运行它。

4

0 回答 0