Ich verwende Web Socket mit PHP5 und dem Chrome-Browser als Client. Ich habe den Code von der Website http://code.google.com/p/phpwebsocket/ übernommen .
Ich starte den Server und der Client ist auch verbunden. Ich kann auch chatten. Wenn ich den Server neu starte (indem ich ihn beende und erneut starte), erhält der Client die getrennten Informationen, stellt jedoch beim Senden der Nachricht automatisch keine Verbindung zum Server wieder her.
Wie erreicht man das? Wenn ich die nicht verbundenen Informationen erhalte, sollte ich sie überprüfen und an JavaScript senden, um die Seite zu aktualisieren oder die Verbindung wiederherzustellen?
quelle
start
rekursiv anrufen , ohne jemals zurückzukehren.Die von Andrew angegebene Lösung funktioniert nicht einwandfrei, da der Server im Falle eines Verbindungsverlusts möglicherweise mehrere Abschlussereignisse sendet.
In diesem Fall legen Sie mehrere setTimout-Werte fest. Die von Andrew angegebene Lösung funktioniert möglicherweise nur, wenn der Server vor fünf Sekunden bereit ist.
Dann habe ich basierend auf der überarbeiteten Andrew-Lösung setInterval verwendet, um die ID an das Fensterobjekt anzuhängen (auf diese Weise ist sie "überall" verfügbar):
quelle
setTimeout
wenn Sie die Idee "Global Timer ID" auf sieonclose
Ereignis wird erneut ausgelöst.WebSocket erneut verbinden
GitHub hostet eine kleine JavaScript-Bibliothek, die die WebSocket-API dekoriert, um eine WebSocket-Verbindung bereitzustellen, die sich automatisch wieder verbindet, wenn die Verbindung getrennt wird.
Die minimierte Bibliothek mit gzip-Komprimierung beträgt weniger als 600 Byte.
Das offizielle Repository finden Sie hier:
https://github.com/joewalnes/reconnecting-websocket
Serverflut
Wenn beim Neustart eine große Anzahl von Clients mit dem Server verbunden ist. Es kann sich lohnen, die Wiederverbindungszeiten der Clients mithilfe eines Exponential Backoff-Algorithmus zu verwalten.
Der Algorithmus funktioniert folgendermaßen:
Referenz:
http://blog.johnryding.com/post/78544969349/how-to-reconnect-web-sockets-in-a-realtime-web-app
quelle
Ich benutze dieses Muster seit einiger Zeit für reines Vanille-JavaScript und es unterstützt ein paar Fälle mehr als die anderen Antworten.
Dies wird wiederholt, sobald der Server die Verbindung schließt, und es wird die Verbindung überprüft, um sicherzustellen, dass sie auch alle 5 Sekunden aktiv ist.
Wenn der Server zum Zeitpunkt der Ausführung oder zum Zeitpunkt des Onclose-Ereignisses nicht aktiv ist, wird die Verbindung immer noch wiederhergestellt, sobald sie wieder online ist.
HINWEIS: Wenn Sie dieses Skript verwenden, können Sie nie aufhören, eine Verbindung herzustellen ... aber ich denke, das ist es, was Sie wollen?
quelle
Unten sind die Codes aufgeführt, die ich in meinem Projekt verwendet habe und die zu 100% funktionieren.
var name = sessionStorage.getItem ('name');
quelle
Kann nicht kommentieren, aber die folgenden:
Plus https://www.npmjs.com/package/back ist schon gut genug :)
quelle
quelle
Schließlich mache ich ws automatische Wiederverbindung in vue + ts, ähnlich wie folgt:
quelle
Das clientseitige Abschlussereignis für WebSocket verfügt über eine wasClean- Eigenschaft, die für mich hilfreich war. Scheint so, als wäre es auf true gesetzt, wenn der Client-Computer in den Ruhemodus wechselt usw. oder wenn der Server unerwartet gestoppt wird usw. Es wird auf false gesetzt, wenn Sie den Socket manuell schließen. In diesem Fall möchten Sie nicht öffnen die Steckdose automatisch wieder. Unten Code aus einem Angular 7-Projekt. Ich habe diesen Code in einem Dienst, so dass er von jeder Komponente verwendet werden kann.
quelle