javascript - websocket onclose triggas inte i Chrome på Linux när klienten kopplas bort från nätverket
Jag implementerade websocket genom att använda Java på serversidan. På klientsidan skapade jag ett websocket-objekt, och jag har min egen funktion för alla händelser inklusive onClose. Jag testade återanslutning... websocket i Chrome 26, Mozilla både på Windows och Chrome.
Chrome i Windows utlöser onclose-händelsen när jag drar ur nätverkskabeln (dvs onclose utlöses med closecode 1006 [abnormally closed] som nämnts i https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent) men Chrome i Linux utlöser ingen händelse.
Vänligen föreslå vilket misstag jag gjorde.
Min exakta fråga är varför Chrome i Windows utlöser onclose när nätverket kopplas bort, men i fallet med Linux utlöses det inte.
Svar #1
Det är möjligt att dessa applikationer inte märker att TCP-anslutningen bryts. En timeout används för att upptäcka en misslyckad TCP-anslutning, och jag tror att standardtimeouten är ganska lång.
Webbläsaren/operativsystemet bör märka att anslutningen är borta så snart du försöker skicka data. Försök skicka lite data efter att du dragit ur nätverkskabeln, se om det utlöser händelsen.
Också, hur länge har du väntat på signalen? Kanske har anslutningen bara en lång TCP-timeout.
Om du fortfarande inte får ett stängt evenemang beror det sannolikt på ett fel i implementeringen. Om du absolut behöver veta när anslutningen bryts, implementera en pingmekanism med din egen timeout. Jag tror att websocket-protokollet definierar sitt eget pingprotokoll, kanske bör du titta på det.
För Chrome verkar det också finnas ett problem rapporterat för detta. Kanske det hjälper dig.