Skip to content

Instantly share code, notes, and snippets.

@timchunght
Forked from redism/client.js
Created April 29, 2020 20:54
Show Gist options
  • Select an option

  • Save timchunght/20ddf0073fedb38c1bcc84665611c8e9 to your computer and use it in GitHub Desktop.

Select an option

Save timchunght/20ddf0073fedb38c1bcc84665611c8e9 to your computer and use it in GitHub Desktop.

Revisions

  1. @redism redism renamed this gist Apr 25, 2014. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. @redism redism created this gist Apr 25, 2014.
    96 changes: 96 additions & 0 deletions client
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,96 @@
    /**
    * 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();
    43 changes: 43 additions & 0 deletions server.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,43 @@
    /**
    * A simple socket.io server for performance benchmark
    *
    * Created by redism on 2014. 4. 22..
    */

    var express = require('express'),
    http = require('http'),
    usage = require('usage'),
    argv = require('optimist').argv,
    SIO = require('socket.io');

    var app = express();
    var server = http.createServer(app);
    var io = SIO.listen(server);

    var port = argv.p || 8082;
    var logLevel = argv.l || 1;
    var connCount = 0;
    server.listen(port);

    io.set('log level', logLevel);
    io.sockets.on('connection', function (socket) {
    connCount++;
    socket.on('echo', function (msg) {
    socket.emit('echo', msg);
    });
    socket.on('disconnect', function () {
    connCount--;
    });
    });

    var pid = process.pid;

    console.log('Listening on port', port, ', log level', logLevel);

    setInterval(function () {
    usage.lookup(pid, {keepHistory: true}, function (err, result) {
    var memInMb = result.memory / (1024 * 1024);
    var cpu = result.cpu;
    console.log('Conn:', connCount + ', Mem:', memInMb.toFixed(1) + ',cpu:', cpu);
    });
    }, 1000);