socket nodejs node javascript websocket mongrel2

javascript - nodejs - Envío de websocket ping/pong frame desde el navegador



websocket server (2)

Sigo leyendo sobre los mensajes ping / pong en websockets para mantener viva la conexión, pero no estoy seguro de cuáles son. ¿Es un tipo de marco distinto? (No veo ningún método en un objeto JavaScript WebSocket en Chrome relacionado con ping-pong). ¿O es solo un patrón de diseño (por ejemplo, literalmente envío "ping" o cualquier otra cadena al servidor y lo respondo). ¿El ping-pong está relacionado con los frames de continuación?

La razón por la que pregunto es que estoy usando un framework Python que corre detrás de Mongrel2, entonces me pregunto si hay una manera de enviar a Mongrel2 un mensaje específico de ping / pong que diga que mantenga viva la conexión sin que mi aplicación python necesite Preocúpate por eso. Análogamente a tener un método HTTP separado para eso, supongo. Y me imagino que un marco de mensaje de ping / pong dedicado podría ser más simple (menos carga en el servidor y la red) que la cadena "ping", aunque eso probablemente no importaría demasiado.

EDITAR: Acabo de mirar RFC 6455 y parece que Ping y Pong son definitivamente tipos de cuadros de control con sus propios códigos de operación. Entonces, ¿cómo envío un marco de Ping desde javascript en Chrome?


No hay API de Javascript para enviar marcos de ping o recibir marcos de pong. Esto es soportado por su navegador, o no. Tampoco hay API para habilitar, configurar o detectar si el navegador admite y está utilizando marcos de ping / pong. Hubo un debate sobre la creación de una API ping / pong Javascript para esto. Existe la posibilidad de que los pings puedan configurarse / detectarse en el futuro, pero es poco probable que Javascript pueda enviar y recibir tramas de ping / pong directamente.

Sin embargo, si controla tanto el código de cliente como el de servidor, entonces puede agregar fácilmente el soporte de ping / pong en un nivel superior. Necesitará algún tipo de encabezado / metadato de tipo de mensaje en su mensaje si aún no lo tiene, pero eso es bastante simple. A menos que planee enviar pings cientos de veces por segundo o tenga miles de clientes simultáneos, la sobrecarga será mínima para hacerlo usted mismo.


Ping está destinado a ser enviado solo de servidor a cliente, y el navegador debe responder lo más pronto posible con Pong OpCode, automáticamente. Entonces no debes preocuparte por eso en un nivel superior.

Aunque no todos los navegadores soportan el estándar como lo suponen, pueden tener algunas diferencias en la implementación de dicho mecanismo, e incluso podría significar que no hay ninguna funcionalidad de respuesta de Pong. Pero personalmente estoy usando Ping / Pong, y nunca vi un cliente que no implementa este tipo de OpCode y respuesta automática en la implementación de bajo nivel del lado del cliente.