2

socket.io サーバーの応答時間を測定しようとしています。そのため、socket.io サーバーはメッセージをエコーするだけで、テストファイルはメッセージを送信し、エコーの送信から取得までに必要な時間をログに記録します。複数のクライアントをシミュレートするために、マネージャー ファイルの child_process を使用して、このテストファイルを複数回開始します。

奇妙なことに、たった 1 つのテストファイルで 0.2 の応答時間が得られます。さらに4つのクライアントを生成するマネージャーを開始すると、最大1.3になり、それぞれ4つのクライアントを持つ別々のターミナルで2つのマネージャーを開始すると、最大で約3になります。 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 つの子を生成するための複数の個別の呼び出しは、多くの子を持つ 1 つの呼び出しよりも多くの負荷がかかるのはなぜですか?

子を生成する私の managerfile は次のとおりです。

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);
     });
}

そして、これは最後の 1 秒間の平均応答時間を測定する私のテストファイルです。

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