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ビットで実行しています。