Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

A benchmark script for measuring client latency

  • Loading branch information...
isaacs committed Mar 7, 2012
1 parent b72d43c commit d5fca08da45feb6e28c19a0ff2cfd819edf9238c
Showing with 81 additions and 0 deletions.
  1. +81 −0 benchmark/client_latency.js
@@ -0,0 +1,81 @@
// 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 request = require('request');
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);
});
}

0 comments on commit d5fca08

Please sign in to comment.
You can’t perform that action at this time.