2012-08-01 6 views
10

Sto usando WebSockets Netty e tutto sembra funzionare bene tranne questo problema minore:Chrome: connessione websocket non chiuso alla chiusura del browser

Se chiudo il browser/scheda del cliente js websocket, la connessione websocket è automatcally chiuso quando si utilizza Mozilla firefox (al momento si utilizza Firefox 14), ma la stessa cosa non accade in Chrome 20/21.

Chiunque abbia visto un problema simile/qualcuno può dire perché la connessione non viene chiusa automaticamente?

risposta

6

Immagino che avrei dovuto controllarlo prima nella sezione bug chromium, ma non ero sicuro se fosse un bug. E 'stato riportato in precedenza da qualcuno e un bug di cromo già esiste:

Issue 51687 : WebSocket: Send close with code 1001 on reload/tab close

Aggiornamento: Qualcuno ha presentato una patch per risolvere questo problema, si può vedere nel link qui sopra.

+1

Chrome non chiude la connessione, quando chiudi il browser. :( – Goot

1

Questo potrebbe non essere corretto, ma non posso pubblicare un commento alla tua domanda. Chrome/Chromium non si chiude realmente se hai un'app in esecuzione e hai selezionato "Continua a eseguire app in background quando Chromium è chiuso" da Impostazioni -> Sotto il cofano.

Può trattarsi del fatto che tratta la connessione web come app. Prova a guardare i tuoi processi in esecuzione e uccidi qualsiasi processo di cromo/cromo che trovi.

Ancora una volta, questa è solo speculazione da parte mia.

+0

No, io non la penso così come, anche dopo la disattivazione di questa opzione, la connessione websocket non è chiuso sulla chiusura della scheda. – Rndm

+0

Quindi potrebbe essere un bug in Chrome. Dovresti aprire una segnalazione di bug con il progetto chromium. –

+0

L'ho postato qui per confermare se qualcun altro l'ha visto o c'è qualche opzione disponibile per risolverlo. – Rndm

0

Chrome non chiude la connessione, quando un utente chiude la finestra o il browser. Attiverà un evento di errore.

Una possibile soluzione potrebbe essere la seguente:

@OnError 
    public void onErr(Throwable t) { 
     onClose(this.container.getWsSession(), null); 

    } 

Ma questo chiuderà la connessione ogni volta, un errore viene attivato. Potresti non controllare il throwable, prima di chiudere la connessione da solo.

Per ulteriori discussione, si prega di unirsi a questa domanda:

Websocket: Closing browser triggers onError() in chrome but onClose() event in Firefox