2011-09-09 15 views
6

sto attualmente lavorando con WebSockets e un server PHP: funziona molto bene con Google Chrome e Opera, ma non con Firefox 6.Javascript e WebSockets: utilizzando il protocollo specifico

Penso che sia a causa della versione del protocollo quest'ultimo utilizza: vedo da qualche parte che utilizza la settima versione, mentre è una versione precedente per Google Chrome e Opera.

Così, ho modificato il mio codice del server per gestire questa nuova versione: hashing il tasto sicuro con 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 e altri animali, Firefox riesce a connettersi. Ma se un altro cliente vuole connettersi (anche un altro Firefox), il primo con Firefox si deconnetterà da solo.

ho visto che di buffer ricevuto da socket_recv() è vuota o hash ...

così ho deciso di saltare l'idea di gestire il protocollo utilizzato da Firefox 6 (non ci sono alcuna documentazione su Internet ... !): Penso che potrebbe essere più semplice specificare il protocollo da utilizzare direttamente in JavaScript.

Su this page dicono che siamo in grado di scrivere questo:

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

Ma cosa dovremmo scrivere invece di "my-custom-protocollo" al fine di utilizzare il protocollo gestito da Google Chrome e Opera?

Grazie in anticipo!

+0

C'è la versione 'hybi-00' che è anche chiamata' hixie-76' e include le due chiavi binarie. C'è anche il nuovo 'hybi-07' che usa quella chiave sicura che hai postato. Dovresti generare un handshake corretto a seconda della versione richiesta * dell'handshake *. Poiché entrambe le versioni utilizzano diversi nomi di intestazione per le chiavi, dovrebbe essere possibile. – pimvdb

+0

Grazie per la tua risposta! Così ho provato questo: 'var mySocket = new WebSocket (" http://www.example.com/socketserver "," hybi-00 ");' ma l'intestazione inviata da Firefox è sempre la stessa ... L'unica differenza è che ora c'è _Sec-WebSocket-Protocol: hybi-00_ nell'intestazione, ma utilizza ancora la settima versione. – KorHosik

+0

Penso di non essere stato completamente chiaro. Ogni browser invia una versione e non è possibile controllarla. Sul server, tuttavia, è possibile verificare quale versione è stata inviata e rispondere in modo appropriato (ovvero la risposta corretta all'handshake). – pimvdb

risposta

10

L'opzione di protocollo per il costruttore WebSocket è in realtà un "sub-protocollo" (viene spesso chiamato con quel nome) ed è un sottoprotocollo a livello di applicazione. Non ha alcun effetto sulla versione attuale del protocollo WebSocket. I browser supportano fondamentalmente una singola versione del protocollo WebSocket stesso. La maggior parte dei server supporta diverse versioni del protocollo.

Firefox 6.0 ha introdotto il supporto per la nuova serie di protocolli HyBi (HyBi-00 è in realtà solo una copia del protocollo Hixie-76). Le versioni HyBi introducono un nuovo formato di frame per i dati e non sono solo una modifica all'handshake. Chrome 14 utilizza anche la nuova serie di protocolli HyBi.

Ecco la versione più recente del protocollo WebSockets: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-14 sebbene firefox 6.0 sia effettivamente questo http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 ma non ci sono davvero molti cambiamenti reali (soprattutto modifiche testuali alle specifiche stesse).

Sei sicuro che Firefox si sta connettendo con successo (cioè ottieni un evento onopen nel browser)?

+0

Grazie per questi chiarimenti! Ho effettivamente ricevuto un evento onopen, ecco perché suppongo che il problema derivi dal modo in cui i messaggi vengono inviati (e pimvdb ha confermato che ^^). Ho scaricato e testato con Google Chrome 14 e lo stesso problema si è verificato ... Gestisci WebSockets sembra essere così difficile per ora, penso che userò Node.js o qualcos'altro ^^ ' – KorHosik

+0

Potresti dare un'occhiata in [Socket.IO] (http://socket.io) che è un livello WebSocket eseguito su Node.js e gestisce la gestione delle sessioni (e ha anche un fallback per il polling lungo se WebSockets non è supportato dal browser). – kanaka

+0

@KorHosik, anche se pensi che questo abbia risposto alla tua domanda sufficientemente, non dimenticare di scegliere una risposta per quelli che seguono dopo (e per la reputazione, naturalmente ;-)). – kanaka

Problemi correlati