Wie erhole ich mich von einem WebSocket -Client -Computer, der schlafen geht oder App in den Hintergrund (Safari auf dem iPad),

StackOverflow https://stackoverflow.com/questions/8853048

Frage

Ich habe einen Browser-Client-JavaScript, der ein WebSocket (mit Socket.IO) öffnet, um einen langjährigen Vorgang zu beantragen, und dann einen Rückruf erhält, wenn der Prozess abgeschlossen ist. Wenn ich den Rückruf bekomme, aktualisiere ich die Webseite, um den Benutzer mitzuteilen, dass der Prozess abgeschlossen ist.

Dies funktioniert in Ordnung, außer auf meinem iPad, wenn ich zu einer anderen App wechsle und dann zurückkomme (es erhält nie den Rückruf, da ich denke, dass die App zu diesem Zeitpunkt nicht online ist). Ich gehe davon aus, dass das Gleiche auf einem Laptop oder einem anderen Computer passieren wird, der schläft, während er auf den Rückruf wartet.

Gibt es einen Standardweg (oder auf jeden Fall), um mit diesem Szenario umzugehen? Vielen Dank.

Als Referenz, wenn Sie die Problemseite sehen möchten, ist es bei http://amigen.perfectapi.com/

War es hilfreich?

Lösung

In diesem Szenario gibt es ein paar Dinge zu berücksichtigen:

Erkenne die App, die ausgeht/online

Sehen: Online- und Offline -Veranstaltungen.

Wenn Ihre App die erkennt online Ereignis nach dem Computer aufwacht Sie können alle Informationen erhalten, die Sie verpasst haben.

Für ältere Webbrowser müssen Sie dies auf cleverere Weise tun. Bei Pusher Wir haben eine Ping -Pong -Überprüfung zwischen Client und Server hinzugefügt. Wenn der Kunde innerhalb einer bestimmten Zeit keinen Ping erhält, weiß er, dass es ein Verbindungsproblem gibt. Wenn der Server einen Ping sendet und mit einer bestimmten Zeit keinen Pong zurückbekommt, weiß er, dass es ein Problem gibt.

Ein Ping -Pong -Mechanismus ist in der Spezifikation definiert Aber eine Möglichkeit, einen Ping oder eine Pong zu senden, wurde noch nicht auf der Websocket -API definiert.

Über verpasste Informationen abrufen

Die meisten Echtzeitserver liefern nur Nachrichten an verbundene Kunden. Wenn ein Client nicht angeschlossen ist, wird diese Clients die Nachricht verpassen, möglicherweise aufgrund einer vorübergehenden Netzwerkstörung oder seines Computers seit einiger Zeit eingeschlafen.

Einige Frameworks bieten Zugriff auf Nachrichten über einen Verlauf/Cache. Für diejenigen, die dies nicht tun, müssen Sie das Problem (wie oben) erkennen und dann alle verpassten Nachrichten abrufen. Eine gute Möglichkeit, dies zu tun, besteht darin, mit jeder Nachrichten eine Zeitstempel- oder Sequenz -ID bereitzustellen, damit Sie einen Anruf bei Ihrem Webserver tätigen können, um zu sagen: "Geben Sie mir alle Nachrichten seit x".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top