6 Stimmen

Problem der Socket.IO-Verbindungstrennung vor dem Schließen des Fensters

Ich versuche zu verhindern, dass der Client die Verbindung zum Server trennt. Bevor der Benutzer also das Fenster schließt, in dem die App geöffnet ist, tue ich das:

    $(window).bind("beforeunload", function() { 
       return("Close the app?");
    });

Aber das Problem ist, dass, egal ob der Benutzer wählt zu verlassen oder bleiben auf der Seite, wo die App geöffnet ist, der Client get's getrennt (hört auf zu hören) vom Server, bevor auch ich eine Option ausgewählt. Also, wenn der Benutzer wählt, auf der Seite zu bleiben, wird nichts gesendet oder vom Server empfangen.

Wie kann das sein? Wie kann dies verhindert werden?

7voto

Dmitry A. Shashkin Punkte 536

Ich hatte bei meinem Projekt genau das gleiche Problem.
Wenn Sie anrufen socket.connect() sollten Sie sync disconnect on unload Parameter Ihrer Verbindung zu false (es ist true standardmäßig):

var conn_options = {
  'sync disconnect on unload':false
};
socket = io.connect(url, conn_options);

Weitere Anschlussmöglichkeiten finden Sie hier: https://github.com/LearnBoost/socket.io/wiki/Configuring-Socket.IO

P.S. Ich hoffe, es ist noch aktuell für dich :)

UPD.
Seitdem das Dokument geändert wurde, false ist jetzt der Standardwert von sync disconnect on unload

0voto

Fuu Punkte 3334

Möglicherweise können Sie das Problem nicht vermeiden, da es keine anderen Ereignisse gibt, die vor "beforeunload" beim Schließen des Fensters ausgelöst werden, von denen ich weiß. Sie könnten das Problem jedoch umgehen, indem Sie den Socket bitten, die Verbindung im Callback des Dialogs zum Schließen des Fensters wiederherzustellen, wenn der Benutzer sich dafür entscheidet, die Seite nicht zu verlassen. Das Wiederherstellen der Verbindung ist ziemlich einfach, nur:

socket.connect()

Hier ist eine weitere Frage, die die Wiederherstellung der Verbindung genauer beschreibt:

So stellen Sie die Verbindung wieder her, sobald die Verbindung unterbrochen wird

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X