我正在尝试测试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上运行它。