Skip to content

Instantly share code, notes, and snippets.

@piscisaureus
Created April 10, 2011 00:24
Show Gist options
  • Save piscisaureus/911925 to your computer and use it in GitHub Desktop.
Save piscisaureus/911925 to your computer and use it in GitHub Desktop.
bench.js
var PORT = 7890;
var BSIZE = 32767;
var CONNS = 500;
var net = require('net');
var start = +(new Date), bytes_written = 0, bytes_read = 0, conns = 0;
var server = net.createServer();
server.on('bogus', function(){}); // setMaxListeners error
server.setMaxListeners(0);
server.listen(PORT, setupTest);
function setupTest() {
setupPair();
}
function setupPair() {
var sock1, sock2, connects = 0;;
server.once('connection', function(sock) {
sock1 = sock;
connects++;
established();
});
sock2 = net.createConnection(PORT);
sock2.on('connect', function() {
connects++;
established();
});
function established() {
if (connects < 2) return;
conns++;
console.log("Total socketpairs: " + conns);
process.on('setupDone', function() {
runTestPair(sock1, sock2);
});
if (conns < CONNS) {
setupPair();
} else {
setInterval(displayStats, 1000);
process.emit('setupDone');
}
}
}
function runTestPair(sock1, sock2) {
var writeBuffer = new Buffer(BSIZE);
function doWrite() {
do {
var result = sock1.write(writeBuffer);
bytes_written += writeBuffer.length;
} while (result);
}
function onData(buf) {
bytes_read += buf.length;
}
sock1.on('drain', doWrite);
sock2.on('data', onData);
doWrite();
}
function displayStats() {
var MBIT = 1000 * 1000 / 8;
var now = +(new Date);
var elapsed = (now - start) / 1000;
var in_mbit = Math.round(bytes_read / elapsed / MBIT);
var out_mbit = Math.round(bytes_written / elapsed / MBIT);
console.log(["in: ", in_mbit, " mbit/s, out: ", out_mbit, " mbit/s"].join(''));
start = now;
bytes_read = bytes_written = 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment