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.
Por juanvc123 el 30 de Mayo de 2014