2010-07-29 19 views
6

Quindi ho visto questo post bellissimo, Experimenting with Node.js. Ho deciso di provare a configurarlo da solo utilizzando l'autore gist. Non ha funzionato.WebSocket si chiude su send

Ulteriori debug mi mostrano che la websocket si sta connettendo bene, ma si sta chiudendo non appena si invoca 'send'. Ecco la traccia Wireshark (perdonate la spaziatura strano):

GET /test HTTP/1.1 

Host: 127.0.0.1:8000 

Sec-WebSocket-Key2: 3 j 92 9 62" 7 0 8 8 

Upgrade: WebSocket 

Connection: Upgrade 

Origin: http://127.0.0.1:3000 

Sec-WebSocket-Key1: 96'5% S72.93?06 



......(bHTTP/1.1 101 WebSocket Protocol Handshake 

Upgrade: WebSocket 

Connection: Upgrade 

Sec-WebSocket-Origin: http://127.0.0.1:3000 

Sec-WebSocket-Location: ws://127.0.0.1:8000/test 



.4.R....mh.....{.{"action":"move","x":450,"y":22,"w":1146,"h":551}. 

Ho provato questo sia in Chrome e Firefox 4.0 beta. Entrambi mostrano lo stesso comportamento. Se vado allo original blog site, funziona bene.

Un'altra cosa. Se entro in JS console sia in FF o Chrome e faccio la seguente:

ws = new WebSocket('ws://localhost:8000/test') 
ws.send("foo") 

Si stacca subito e non invia il messaggio. Il server mostra la connessione e l'handshake, ma non riceve mai un messaggio.

Ho trovato alcune domande che erano simili ma sono state risolte senza pubblicare la correzione o non sembravano essere applicate in questa situazione. Posso postare il codice dallo gist se renderà più semplice.

risposta

1

Cap. Nonostante credessi di aver installato l'ultima versione di Node.js, non l'ho fatto. Ho un paio di macchine con Node.js su di esse devo aver perso la traccia. Avevo Node.js v0.1.96. Dopo l'aggiornamento alla v0.1.102, tutto funziona correttamente.

Scusate ragazzi! :-D

0

Per il problema di disconnessione succede quando si emette la mandata dal browser, è necessario attendere l'evento OnOpen di sparare prima di emettere un invio:

var conn = new WebSocket('ws://localhost:8000/test'); 
conn.onopen = function (e) { 
    conn.send('foo'); 
} 
conn.onmessage = function (e) { 
    console.log('got: ' + e.data); 
} 
2

Il CloseEvent ha un "codice "proprietà che ti darà informazioni sul motivo per cui la tua connessione è stata chiusa.

"Restituisce un cortocircuito senza segno contenente il codice di chiusura inviato dal server. I seguenti valori sono codici di stato consentiti."

Sono supportati diversi valori di codice. Ecco le più importanti:

  • 1000: CLOSE_NORMAL
  • 1001: CLOSE_GOING_AWAY
  • 1002: CLOSE_PROTOCOL_ERROR
  • 1003: CLOSE_UNSUPPORTED
  • 1005: CLOSE_NO_STATUS

See CloseEvent API docs on MDN di più.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/12231080) – dbugger

+0

Grazie mille per il consiglio. Lo avrò in mente la prossima volta! –