/** * A simple socket.io client for performance benchmark * * Created by redism on 2014. 4. 22.. */ var SocketIO = require('socket.io-client'), argv = require('optimist').argv; var n = argv.n || 10; var b = argv.b || 100; // bucket-size var host = argv.h || 'http://localhost:8082'; var sockets = []; var msg = 1; var connectionCount = 0; var disconnectionCount = 0; var reconn = 0; var setupSocket = function setupSocket(socket, id) { socket.data = {id: id}; socket.on('connect', function () { connectionCount++; }); socket.on('disconnect', function () { connectionCount--; disconnectionCount++; }); socket.on('reconnect', function () { reconn++; }); socket.on('error', function (err) { console.log('Error:', err); }) socket.on('echo', function (msg) { console.log(this.data.id, 'received', msg); }); } var startTest = function startTest() { setInterval(function () { // emit message once per second for each socket. var i, socket; // for (i = 0; i < sockets.length; i++) { // socket = sockets[i]; // socket.emit('echo', 'Message from ', socket.data.id); // } // Monitor count console.log('Connection count:', connectionCount, 'dis:', disconnectionCount, 're:', reconn); }, 1000); } var socket, i; var remaining = n * b; var socketsToConnect = 0; var tryMoreConnection = function tryMoreConnection() { // If all previous connections have been established, if (socketsToConnect == connectionCount) { // try another bucket size for (i = 0; i < b; i++) { (function (j) { socket = SocketIO.connect(host, { 'force new connection': true, 'reconnect': false, 'reconnection': false }); setupSocket(socket, j); sockets.push(socket); socketsToConnect++; remaining--; })(i); } } // Check if we have more clients to simulate. if (remaining > 0) { setTimeout(function () { tryMoreConnection(); }, 100); } } tryMoreConnection(); console.log('Starting stress test client, host :', host + ', socket # :', n); startTest();