WebSocket es un protocolo que proporciona canales de comunicación full-duplex a través de una única conexión TCP. Es comúnmente utilizado por las aplicaciones de una sola página (SPA), y en cierta medida por las aplicaciones móviles, para añadir funcionalidad basada en el servidor, lo que suele suponer una mejora del rendimiento respecto a las soluciones basadas en el sondeo.
Pruebas de carga de WebSockets con k6
Comparando las pruebas basadas en HTTP con las de WebSocket, hay algunas diferencias en la estructura y el funcionamiento interno. La principal diferencia es que, en lugar de ejecutar continuamente un bucle de la función principal (export default function() { ... }) una y otra vez, cada VU está ahora configurada para ejecutar un bucle de eventos asíncrono.
La estructura básica de una prueba WebSocket se parece a esto:
Como puedes ver arriba el método connect() toma una función "run" como su tercer parámetro, y esa función debe aceptar un objeto Socket como su único parámetro. La función "run" forma la base del bucle de eventos asíncrono.
Será llamada inmediatamente cuando se cree la conexión WebSocket, ejecutará todo el código dentro de ella (normalmente código para configurar los manejadores de eventos), y luego bloqueará hasta que la conexión WebSocket sea cerrada (por el host remoto o usando socket.close()).
Manejo de errores
Para capturar los errores que pueden ocurrir durante la vida de una conexión WebSocket se adjunta un manejador al evento "error", como se ilustra a continuación:
Timers
Si quieres programar una acción recurrente puedes utilizar la función socket.setInterval para especificar una función que debe ser llamada con un intervalo determinado.
Timeouts
Se puede añadir un tiempo de espera a la conexión WebSocket pasando una función manejadora así como el valor del tiempo de espera (en milisegundos) a la función socket.setTimeout.
El tiempo de espera en el código anterior cerrará la conexión WebSocket después de 2 segundos.
Múltiples manejadores de eventos
Puede adjuntar múltiples funciones de control a un evento, como ilustra el código siguiente.