2012-05-08 12 views
5

Ho scritto un algoritmo per elaborare i dati Websockets in PHP. La decodifica da Chrome/Firefox va bene, ma ho sempre problemi nell'invio dei dati dal server al client (Chrome 18, Websockets 13). La routine del server risponde automaticamente con "Ricevuto" dopo aver ricevuto un messaggio.Websockets irrisolvibile "frame di continuazione imprevisto ricevuto"

Continuation frame error.

non ci sono assolutamente altri byte seguito il messaggio, come lo STDOUT indica e la discarica WireShark indica (dati recuperati tramite RawCap). In WireShark/RawCap, per qualche motivo, il messaggio server-> client è apparso sotto un messaggio "ACK".

STDOUT

Wireshark

Vorrei davvero apprezzare l'intuizione di qualcuno in questo. Mi sta facendo diventare pazzo.

Dustin Oprea

+1

L'output di registrazione sembra corretto. Puoi pubblicare il tuo codice per favore? – simonc

risposta

5

Ho capito. Risulta che il codice che ho originariamente adottato mise un singolo carattere NULL dopo le newline seguendo le intestazioni di risposta handshake e non l'avevo notato. Sembra che a) il browser sposti tutti i messaggi websocket ricevuti attraverso un buffer di caratteri che lascia il singolo carattere NULL in primo piano una volta che l'autenticazione-risposta è stata elaborata, e b) non è stato un problema fino a quando il messaggio -next- è stato ricevuto.

flusso:

1) browser (Chrome e Firefox) riceve una stretta di mano-risposta con un NULL in più alla fine.
2) Il browser approva la risposta dell'handshake.
3) Il browser invia un messaggio (in questo caso, con un codice "testo", non che ciò sia necessariamente importante) al server.
4) Il server decodifica correttamente i frame.
5) Il server invia un messaggio indietro attraverso la sessione websocket stabilita.
6) Il client si lamenta di avere un frame di continuazione imprevisto.

In alcune condizioni, credo di essere stato in grado di manipolare il messaggio per sopprimere un errore dal browser, ma non ho ancora ricevuto il messaggio del server nel browser.

Come esempio di quanto sopra, credo che, in origine, il server stava inviando una risposta automatica di testo di "risposta" e ha ricevuto il messaggio sopra. In seguito l'ho cambiato in "1234" e ho ancora ricevuto il messaggio sopra. Tuttavia, l'ho modificato in "123" e non ho più ricevuto l'errore, ma non ho ancora ricevuto un evento messaggio nel Javascript.

Dustin Oprea

+0

Grazie per aver postato la tua risposta, ho avuto lo stesso identico problema. –

+0

@Dustin: sto affrontando lo stesso identico problema .. come hai scoperto il carattere null aggiuntivo durante l'invio di dati ..? –

+0

@Sony Non riesco a ricordare. E 'stato frustrante, ma penso che alla fine ho controllato specificamente il NULL. –