2011-09-09 11 views
6

Actualmente estoy trabajando con WebSockets y un servidor PHP: funciona muy bien con Google Chrome y Opera, pero no con Firefox 6.JavaScript y WebSockets: utilizando protocolo específico

Creo que es debido a la versión del protocolo este último usa: veo en algún lugar que usa la séptima versión, mientras que es una versión anterior para Google Chrome y Opera.

Por lo tanto, he modificado mi código de servidor con el fin de gestionar esta nueva versión: numerando la clave segura con 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 y otras materias, Firefox logra conectar. Pero si otro cliente desea conectarse (incluso otro Firefox), el primero con Firefox se desconecta.

he visto que la memoria intermedia recibida por socket_recv() está vacío o hash ...

así que decidí saltar la idea de manejar el protocolo utilizado por Firefox 6 (hay ninguna documentación sobre Internet ... !): Creo que podría ser más fácil especificar el protocolo para usar directamente en JavaScript.

En this page Dicen que podemos escribir esto:

var mySocket = new WebSocket("http://www.example.com/socketserver", "my-custom-protocol"); 

Pero lo que debemos escribir en lugar de "mi-aduana-protocolo" con el fin de utilizar el protocolo gestionada por Google Chrome y Opera?

¡Gracias de antemano!

+0

Existe la versión 'hybi-00' que también se llama' hixie-76' e incluye las dos claves binarias. También está el nuevo 'hybi-07' que usa esa clave segura que publicaste. Debería generar un apretón de manos correcto según la versión que solicite * la llamada *. Dado que ambas versiones usan diferentes nombres de encabezado para las claves, eso debería ser posible. – pimvdb

+0

¡Gracias por tu respuesta! Así que he probado este: 'var mySocket = new WebSocket (" http://www.example.com/socketserver "," hybi-00 ");' pero el envío del encabezado por Firefox sigue siendo el mismo ... La única diferencia es que ahora hay _Sec-WebSocket-Protocol: hybi-00_ en el encabezado, pero todavía usa la séptima versión. – KorHosik

+0

Creo que no he sido del todo claro. Cada navegador envía una versión y no puedes controlarla. Sin embargo, en el servidor, puede verificar qué versión se ha enviado y responder de forma adecuada (es decir, la respuesta de saludo correcta). – pimvdb

Respuesta

10

La opción de protocolo para el constructor WebSocket es realmente un "sub-protocolo" (a menudo se llama con ese nombre) y es un sub-protocolo de nivel de aplicación. No tiene ningún efecto en la versión del protocolo WebSocket real. Los navegadores básicamente admiten una única versión del protocolo WebSocket. La mayoría de los servidores admiten varias versiones del protocolo.

Firefox 6.0 presentó el soporte para la nueva serie de protocolos HyBi (HyBi-00 es realmente solo una copia del protocolo Hixie-76). Las versiones de HyBi presentan un nuevo formato de encuadre para los datos y no son solo un cambio en el protocolo de enlace. Chrome 14 también usa la nueva serie de protocolos HyBi.

Aquí está la versión más reciente del protocolo WebSockets: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-14 aunque Firefox 6.0 es realmente este http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 pero en realidad no hay tantos cambios reales (principalmente cambios de texto en la especificación).

¿Estás seguro de que Firefox se está conectando correctamente (es decir, ¿obtienes un evento abierto en el navegador)?

+0

¡Gracias por estas aclaraciones! De hecho, he recibido un evento onopen, por eso supongo que el problema proviene de la forma en que se envían los mensajes (y pimvdb ha confirmado que ^^). He descargado y probado con Google Chrome 14 y ocurrió el mismo problema ... Administrar WebSockets parece ser tan difícil por ahora, creo que usaré Node.js u otra cosa ^^ ' – KorHosik

+0

Es posible que desee echarle un vistazo en [Socket.IO] (http://socket.io) que es una capa de WebSocket que se ejecuta en Node.js y maneja la administración de la sesión (y también tiene un respaldo para la encuesta larga si WebSockets no es compatible con el navegador). – kanaka

+0

@KorHosik, también si crees que esto ha respondido tu pregunta lo suficiente, no olvides elegir una respuesta para los siguientes (y por reputación, por supuesto ;-)). – kanaka

Cuestiones relacionadas