Gemäß der Protokollspezifikation v76 (dies ist die Version, die der Browser mit der aktuellen Unterstützung implementiert):
Um die Verbindung sauber zu schließen, wird von einem Peer ein Frame gesendet, der nur aus einem 0xFF-Byte gefolgt von einem 0x00-Byte besteht, um den anderen Peer zu bitten, die Verbindung zu schließen.
Wenn Sie einen Server schreiben, sollten Sie sicherstellen, dass Sie einen geschlossenen Frame senden, wenn der Server eine Clientverbindung schließt. Die normale Methode zum Schließen von TCP-Sockets kann manchmal langsam sein und dazu führen, dass Anwendungen glauben, die Verbindung sei noch offen, auch wenn dies nicht der Fall ist.
Der Browser sollte dies wirklich für Sie tun, wenn Sie die Seite schließen oder neu laden. Sie können jedoch sicherstellen, dass ein enger Frame gesendet wird, indem Sie das Ereignis beforeunload erfassen:
window.onbeforeunload = function() {
websocket.onclose = function () {}; // disable onclose handler first
websocket.close();
};
Ich bin nicht sicher, wie Sie ein Onclose-Ereignis erhalten können, nachdem die Seite aktualisiert wurde. Das Websocket-Objekt (mit dem Onclose-Handler) ist nach dem erneuten Laden der Seite nicht mehr vorhanden. Wenn Sie beim Laden der Seite sofort versuchen, eine WebSocket-Verbindung auf Ihrer Seite herzustellen, tritt möglicherweise ein Problem auf, bei dem der Server eine neue Verbindung so bald ablehnt, nachdem die alte getrennt wurde (oder der Browser nicht bereit ist) um Verbindungen an dem Punkt herzustellen, an dem Sie versuchen, eine Verbindung herzustellen) und Sie erhalten ein Onclose-Ereignis für das neue Websocket-Objekt.
onclose
Ereignis unerwartet oder absichtlich ausgelöst wird, wenn der Benutzer navigiert / die Seite neu geladen wird. Ich habe eine Frage gestellt, in der gefragt wird, wie das erwartete Verhalten aussehen soll, welcher Browser es richtig macht und wie wir die automatische Wiederverbindung implementieren.