2012-05-14 15 views
75

estoy leyendo de mesa de ping pong/mensajes en websockets a mantener la conexión viva, pero no estoy seguro de lo que 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?Envío de WebSocket marco de ping/pong desde el navegador

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 mi la aplicación de Python necesita preocuparse 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.

EDIT: 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?

+0

Sólo ping desde el servidor. Todo el mundo sabe sobre el problema de la red en puertos no estándar, por lo que están empezando a hacer ping a intervalos cortos regulares. Supongo que puedes hacer ping a un servidor mal escrito, pero puede que no sea demasiado inteligente para hacer algo sensible con ellos. –

Respuesta

84

No hay ninguna API Javascript para enviar tramas de ping pong o recibir tramas. 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 discussion about creating a Javascript ping/pong API 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 controlas el cliente y el servidor de código, a continuación, puede agregar fácilmente el apoyo 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.

+4

Bueno, eso es desafortunado. Gracias por la respuesta, exactamente lo que estaba buscando. – danny

+7

Es una pena que ping/pong no se haya implementado en JavaScript WebSocket nueva API. Por otro lado, la implementación personalizada de esa funcionalidad debería ser bastante simple. Buena respuesta (+1) – Tom

22

Ping está destinado a ser enviado solamente del servidor al cliente, y el navegador debe responder tan pronto como sea posible con Pong código de operación, de forma automática. Entonces no debes preocuparte por eso en un nivel superior.

A pesar de que no todos los navegadores compatibles con el estándar, ya que supone que, podrían tener algunas diferencias en la implementación de estos mecanismos, y que incluso podría significa que no hay funcionalidad respuesta 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.

+0

Interesante, tiene más sentido que el servidor inicie las llamadas. ¿Qué servidor web estás usando? – danny

+0

Estoy usando la propia implementación del protocolo WebSockets en .Net/Mono para mi propia diversión. Las fuentes se pueden encontrar aquí https://github.com/Maksims/gh12-server – moka

+1

En mis pruebas, definitivamente encontré navegadores comunes que no admiten ping/pong; No puedo recordar qué –

Cuestiones relacionadas