diff --git a/benchmark/tls-connect.js b/benchmark/tls-connect.js new file mode 100644 index 0000000000..512adca142 --- /dev/null +++ b/benchmark/tls-connect.js @@ -0,0 +1,86 @@ + +var assert = require('assert'), + fs = require('fs'), + path = require('path'), + tls = require('tls'); + + +var target_connections = 10000, + concurrency = 10; + +for (var i = 2; i < process.argv.length; i++) { + switch (process.argv[i]) { + case '-c': + concurrency = ~~process.argv[++i]; + break; + + case '-n': + target_connections = ~~process.argv[++i]; + break; + + default: + throw new Error('Invalid flag: ' + process.argv[i]); + } +} + + +var cert_dir = path.resolve(__dirname, '../test/fixtures'), + options = { key: fs.readFileSync(cert_dir + '/test_key.pem'), + cert: fs.readFileSync(cert_dir + '/test_cert.pem'), + ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ] }; + +var server = tls.createServer(options, onConnection); +server.listen(8000); + + +var initiated_connections = 0, + server_connections = 0, + client_connections = 0, + start = Date.now(); + +for (var i = 0; i < concurrency; i++) + makeConnection(); + + +process.on('exit', onExit); + + +function makeConnection() { + if (initiated_connections >= target_connections) + return; + + initiated_connections++; + + var conn = tls.connect(8000, function() { + client_connections++; + + if (client_connections % 100 === 0) + console.log(client_connections + ' of ' + target_connections + + ' connections made'); + + conn.end(); + makeConnection(); + }); +} + + +function onConnection(conn) { + server_connections++; + + if (server_connections === target_connections) + server.close(); +} + + +function onExit() { + var end = Date.now(), + s = (end - start) / 1000, + persec = Math.round(target_connections / s); + + assert.equal(initiated_connections, target_connections); + assert.equal(client_connections, target_connections); + assert.equal(server_connections, target_connections); + + console.log('%d connections in %d s', target_connections, s); + console.log('%d connections per second', persec); +}