mirror of https://github.com/lukechilds/node.git
isaacs
13 years ago
1 changed files with 81 additions and 0 deletions
@ -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); |
|||
}); |
|||
} |
Loading…
Reference in new issue