mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.0 KiB
81 lines
2.0 KiB
13 years ago
|
// first start node http_simple.js
|
||
|
var http = require('http');
|
||
|
|
||
|
var latency = [];
|
||
|
|
||
|
var numRequests = parseInt(process.argv[2], 10) || 100;
|
||
|
var maxSockets = parseInt(process.argv[3], 10) || 100;
|
||
|
var runs = parseInt(process.argv[4], 10) || 100;
|
||
|
var prefix = process.argv[5] || '';
|
||
|
if (prefix) prefix += '_';
|
||
|
var r = 0;
|
||
|
|
||
|
var port = parseInt(process.env.PORT, 10) || 8000;
|
||
|
var host = process.env.HOST || '127.0.0.1';
|
||
|
|
||
|
http.globalAgent.maxSockets = maxSockets;
|
||
|
|
||
|
run();
|
||
|
|
||
|
function run() {
|
||
|
if (r++ === runs) {
|
||
|
return finish();
|
||
|
}
|
||
|
|
||
|
// make numRequests in parallel
|
||
|
// retain the order in which they are *made*. This requires trapping
|
||
|
// each one in a closure, since otherwise, we'll of course end
|
||
|
// up mostly sorting them in ascending order, since the cb from a
|
||
|
// fast request will almost always be called before the cb from a
|
||
|
// slow one.
|
||
|
var c = numRequests;
|
||
|
var lat = [];
|
||
|
latency.push(lat);
|
||
|
for (var i = 0; i < numRequests; i++) (function (i) {
|
||
|
makeRequest(function(l) {
|
||
|
lat[i] = l;
|
||
|
c--;
|
||
|
if (c === 0) run();
|
||
|
});
|
||
|
})(i);
|
||
|
}
|
||
|
|
||
|
function makeRequest(cb) {
|
||
|
var opts = { host: host,
|
||
|
port: port,
|
||
|
uri: 'http://'+host+':'+port+'/bytes/12',
|
||
|
forever: true,
|
||
|
path: '/bytes/12' };
|
||
|
var pre = Date.now();
|
||
|
var req = http.get(opts, function(res) {
|
||
|
return cb(Date.now() - pre);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function finish() {
|
||
|
var data = [];
|
||
|
latency.forEach(function(run, i) {
|
||
|
run.forEach(function(l, j) {
|
||
|
data[j] = data[j] || [];
|
||
|
data[j][i] = l;
|
||
|
});
|
||
|
});
|
||
|
|
||
|
data = data.map(function (l, i) {
|
||
|
return l.join('\t')
|
||
|
}).join('\n') + '\n';
|
||
|
|
||
|
var fname = prefix +
|
||
|
'client_latency_' +
|
||
|
numRequests + '_' +
|
||
|
maxSockets + '_' +
|
||
|
runs + '.tab';
|
||
|
var path = require('path');
|
||
|
fname = path.resolve(__dirname, '..', 'out', fname);
|
||
|
fname = path.relative(process.cwd(), fname);
|
||
|
require('fs').writeFile(fname, data, function(er) {
|
||
|
if (er) throw er;
|
||
|
console.log('written: %s', fname);
|
||
|
});
|
||
|
}
|