Probador de WebSocket: conecta, envía y registra frames online | We.Inc
Probador de WebSocket online y gratis. Abre una conexión ws:// o wss:// desde tu navegador, envía texto o JSON, observa cada mensaje y lee el código de cierre cuando termine.
Probador de WebSocket
Pega una dirección wss:// o ws://, pulsa Conectar y este probador abre un WebSocket real desde tu propio navegador. Escribe un mensaje, envíalo, y cada frame saliente y entrante queda en un registro con marca de tiempo. Cuando el socket termina ves el código de cierre, el motivo y si el handshake de cierre terminó limpiamente.
Qué significa cada número de readyState
Valor
Constante
Significado
CONNECTING
Creado, el handshake aún no ha terminado
OPEN
Listo: send() ya funciona
CLOSING
El handshake de cierre ha empezado
CLOSED
Cerrado, o la conexión nunca llegó a abrirse
Nada de esto pasa por nuestros servidores. La conexión la abre el objeto WebSocket integrado en la pestaña del navegador en la que estás leyendo esto, así que el servidor ve tu navegador, tu dirección IP y el origen de esta página, https://we.inc. Un servidor que compruebe la cabecera Origin puede rechazarla. Como esta página se sirve por https, usa preferiblemente una dirección wss://; el navegador puede bloquear una ws:// simple por insegura.
Introduce la dirección del servidor. Debe empezar por ws://, wss://, http:// o https:// y no puede contener un fragmento #.
Añade subprotocolos si el servidor los espera, separados por comas, y pulsa Conectar.
Escribe un mensaje y pulsa Enviar, o pulsa Ctrl+Enter dentro del cuadro. Marca la opción JSON para comprobar que el texto se puede analizar antes de enviarlo.
Lee el registro: las flechas indican la dirección, y la entrada de cierre muestra el código, el motivo y el indicador wasClean.
Pulsa Cerrar para terminar la sesión con tu propio código (1000, o cualquiera de 3000 a 4999) y un motivo breve.
¿Se cierra al instante con 1006 y sin motivo? El handshake falló antes de que pasara ningún frame. Revisa la dirección, el puerto, TLS y si el servidor rechaza orígenes ajenos.
Los navegadores ocultan a propósito los detalles del handshake a los scripts, así que el evento error nunca dice por qué. Abre el panel Network de las herramientas de desarrollo y filtra por WS para ver el estado HTTP del upgrade.
Los navegadores consideran localhost y 127.0.0.1 direcciones de confianza, así que ws://localhost:PORT es la forma más fácil de probar un servidor que se ejecuta en tu propia máquina.
Los frames binarios llegan como objetos Blob por defecto. Este probador muestra su tamaño en bytes en lugar de intentar imprimirlos.
Mantén cortos los motivos de cierre: el navegador lanza un SyntaxError si el motivo supera los 123 bytes una vez codificado en UTF-8.
Preguntas frecuentes
¿Por qué mi conexión falla aquí pero funciona en mi propia app?
La causa habitual es una comprobación de origen. Tu app se conecta desde su propio origen, mientras que esta página se conecta desde https://we.inc. Si el servidor solo acepta orígenes de una lista, rechaza el handshake y el navegador informa del código de cierre 1006. Lo otro que puedes probar es la forma wss:// de la dirección, ya que esta página se sirve por https.
¿Se envían mis datos a We.Inc?
No. La página solo crea un socket en tu pestaña y escribe en un registro en memoria. Los mensajes van directamente entre tu navegador y el servidor que escribiste. Al recargar la página se borra el registro.
¿Puedo definir cabeceras personalizadas como Authorization?
No desde un navegador. El constructor de WebSocket solo acepta una URL y una lista opcional de subprotocolos. Los servidores que necesitan un token suelen leerlo de un query string, una cookie o el primer mensaje tras abrir la conexión.
¿Por qué no puedo enviar un ping desde esta herramienta?
La interfaz WebSocket del navegador solo tiene los métodos send() y close(). Ping y pong son frames de control que el navegador responde por su cuenta cuando un servidor le hace ping, así que los scripts de la página nunca los ven. Envía un mensaje de texto normal si tu servidor usa un heartbeat a nivel de aplicación.
¿Qué códigos de cierre puedo enviar?
Los scripts solo pueden pasar a close() el 1000 o un código de 3000 a 4999. Cualquier otro número lanza un InvalidAccessError. Los códigos del rango 1001 a 1015 los fijan los propios navegadores y servidores.
Qué ocurre al pulsar Conectar
El navegador envía una petición HTTP normal con Upgrade: websocket, una Sec-WebSocket-Key aleatoria y una cabecera Origin. Un servidor dispuesto responde con el estado 101 Switching Protocols y un valor Sec-WebSocket-Accept derivado de esa clave. A partir de ahí la misma conexión TCP transporta frames en ambos sentidos.
Cada intento termina con un evento open o con un evento close. Si ves close sin open, el upgrade nunca tuvo éxito, lo que reduce el fallo a la dirección, la red o las reglas de handshake del servidor.
Cómo leer el evento close
La entrada de cierre del registro incluye tres cosas. code es el número de la tabla de abajo. reason es el texto que haya enviado el otro lado, a menudo vacío. wasClean solo es true cuando ambos lados intercambiaron frames de cierre, así que false suele significar que la red se cayó o que el servidor falló.
Códigos de cierre de WebSocket
El rango de 1000 a 1015 está definido para el propio protocolo. De 3000 a 3999 se registra en IANA para bibliotecas y frameworks, y de 4000 a 4999 queda libre para uso privado entre tu propio cliente y tu servidor.
Códigos de cierre y lo que te indican
Código
Nombre
Qué suele significar
Cierre normal
El trabajo terminó y el socket se cerró a propósito
Saliendo
El servidor se está apagando o la página navegó a otro sitio
Error de protocolo
Uno de los lados incumplió las reglas de framing
Datos no admitidos
Datos de un tipo que el extremo no puede aceptar, como binario hacia un servidor que solo admite texto
Sin estado recibido
Reservado: llegó un frame de cierre sin código
Cierre anómalo
Reservado: no hubo ningún frame de cierre, a menudo por un handshake fallido o una caída de red
Datos de frame no válidos
Un mensaje tenía datos incoherentes, por ejemplo texto que no es UTF-8
Violación de política
Un rechazo genérico cuando 1003 y 1009 no encajan
Mensaje demasiado grande
Un frame era más grande de lo que acepta el extremo
Extensión obligatoria
El cliente quería una extensión que el servidor no aceptó
Error interno
El servidor se encontró con una condición inesperada
Reinicio del servicio
El servidor se está reiniciando
Inténtalo más tarde
Una condición temporal, como una sobrecarga
Puerta de enlace incorrecta
Un proxy recibió una respuesta no válida del servidor de origen
Handshake TLS
Reservado: falló el handshake TLS, por ejemplo por un certificado no fiable
3000 a 3999
Registrados
Definidos por bibliotecas y frameworks
4000 a 4999
Uso privado
Lo que acuerden tu cliente y tu servidor
El mismo cliente en unas pocas líneas de JavaScript
Cliente mínimo para el navegador
Esto es lo que hace el probador por dentro: abrir, registrar cada mensaje e informar del código de cierre.
Subprotocolos (opcional, separados por comas)
Conectar
Cerrar
Código de cierre
Motivo del cierre
Mensaje
Enviar
Ctrl+Enter envía
Comprobar que el mensaje es JSON válido
Borrar registro
Estado: {v}
Registro de frames
Aún no hay nada. Conéctate a un servidor para iniciar el registro.
Conectado. El servidor eligió el subprotocolo: {v}
Cerrado con código {n}, motivo "{v}", wasClean {c}
Evento de error: el navegador no dice por qué. Revisa el panel Network.