Comunidad de diseño web y desarrollo en internet

Pruebas de estrés para WebSockets en Node.js

Para hacer un test de estrés exclusivamente sobre los WebSockets, voy a usar una librería de Node.js llamada websocket-bench. Esta librería nos permitirá usar Node.js desde nuestro equipo local para hacer un test a nuestra aplicación.

Hoy en día es muy necesario hacer pruebas a nuestras aplicaciones para ver si soportan una gran cantidad de usuarios y interacciones, pero en el tema de socket.io es algo especial ya que no hay muchas formas de probar directamente los WebSockets, esto se debe a que muchos de los tests que hay en el mercado se enfocan a servidores HTTP.

Para instalarla tienes que ya tener instalado Node.js que viene con npm que es el manejador de paquetes, ya con esto listo, abres una terminal y haces lo siguiente:

Código :

$ sudo npm -g install websocket-bench


Ahora vamos a preparar nuestra infraestructura para aceptar nuestras consultas de websocket-bench:

Código :

var Io = require('socket.io').listen(2501);
// basic config
Io.set('log level', 0);
Io.enable('browser client minification');
Io.enable('browser client etag');
Io.enable('browser client gzip');
Io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']);
// on connect
Io.sockets.on('connection', function(socket){
    // event stres
    socket.on('test', function(message){
        // do something.....
        console.log(message);
    });
});


Este server básico tiene un evento 'test' en el cual podemos colocar nuestro código que va a ser testeado.

Ahora vamos a crear un pequeño código en JavaScript de nombre "generator.js" el cual va a usar nuestra librería websocket-bench para emular la conexión del socket y de paso emitir el mensaje al nodo:

Código :

(function() {
    exports.onConnect = function(client, done) {
        client.emit('test', 'TEST');
        done();
    };
    exports.sendMessage = function(client, done) {
        done();
    };
})();


Listo! ya con esto podemos emitir un evento a test y medir el rendimiento de nuestro código en los sockets. Ahora corramos nuestra librería usando todo lo reunido hasta el momento:

Código :

$ websocket-bench -a 1000 -c 1000 -m 1 http://localhost:2501 -g generator.js


Miremos bien lo que tenemos aquí:

  • -a xxxx es la cantidad de usuarios, por defecto son 100
  • -c xxxx es la cantidad de concurrencia por segundo
  • -m x es la cantidad de mensajes por usuario
  • -g xxxx.js es que vamos a usar un javascript para el test


Entonces vamos a cargar 1000 usuarios, todos entrando al mismo tiempo y trabajando en un segundo. El resultado para mi aplicación en local es esta:

Código :

Launch bench with 1000 total connection, 1000 concurent connection
1 message(s) send by client
1 worker(s)
WS server : socket.io
#### steps report ####                                                                                               
Number ; Connections ; Errors ; Duration(ms)
1000 ; 998 ; 2 ; 5333
#### total report ####
Number ; Connections ; Errors ; Message Send ; Message Fail ; Duration(ms)
1000 ; 998 ; 2 ; 998 ; 0 ; 5333


Estos resultados son altamente positivos, pero ojo! estos resultados son el local, en producción las cosas cambian completamente y lo único que tienes que hacer es cambiar la url.

Ten en cuenta que si optimizas tu código tendrás resultados diferentes.

Para mas información mira en Git websocket-bench

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate