Ich habe die Channel-API-Funktion von Google App Engine in meiner Anwendung implementiert. Alles läuft reibungslos. Ich erstelle jede Stunde neue Kanäle für jeden Benutzer. Ich habe es geschafft, einen Kanal pro Sitzung (denselben Kanal für verschiedene Registerkarten in einem Browser) zu verwalten. Ich habe die Methoden onerror und onclose so implementiert, dass bei jedem Aufruf ein Aufruf an den Server erfolgt, der nach einem gültigen Token fragt.
Manchmal, nachdem der Kanal eine Zeitlang am Leben war, wird die Verbindung unterbrochen. Ich kann fehlgeschlagene HTTP-Aufrufe von talkgadget.google.com auf der JavaScript-Konsole sehen. Die URLs sind in etwa so:
Ссылка ...
Diese Anrufe haben Antworten wie "401 (Token abgelaufen)" oder "401 (Token ungültig)". In der Tat ist das Token, das vom Client verwendet wird, ungültig. Es sollte mit dem neuen Token aktualisiert werden, die Methoden onerror oder onclose werden jedoch nicht aufgerufen. Wie soll ich herausfinden, wann das passieren wird oder wie ich damit umgehen soll? Es gibt keine echte Möglichkeit zu sagen, ob ein Client getrennt ist oder nicht, mit Ausnahme der Methoden onerror oder onclose. Dieses Problem wird gelöst, wenn ich die Seite aktualisiere (ich erhalte bei jeder Aktualisierung des Benutzers das gültige Token aus der Datenbank).
Ich habe die "readyState" -Eigenschaft der Socket-Objekte überprüft und sie hatte den Wert 1. Es gibt viele, die sich mit diesem Problem konfrontiert sehen und ab Datum scheint es keine gültige Lösung zu geben, die von den Leuten bei GAE angeboten wird.
Bearbeiten: Ich bin ein Premium-Kontoinhaber und dieses Problem hält unsere Bereitstellungen zurück.
Edit 2: Mit einem Kanal pro Registerkarte verringert sich die Häufigkeit dieses Vorgangs. Aber es löst das Problem nicht vollständig.
Seit der Veröffentlichung der Frage sind sechs Tage vergangen und das AppEngine-Team oder andere Benutzer haben keine Antwort erhalten.
Die von mir angewandte Problemumgehung bestand darin, eine Schaltfläche auf der Site zu haben, die das (gültige) Token von der Datenbank abruft, den Kanal schließt und dann mit dem empfangenen Token wieder öffnet. Manchmal ist es ein neues Token, das vorher empfangen werden sollte, manchmal ist es das gleiche Token, das die ganze Zeit gültig war.
Dieses Problem kann nicht oft wiederholt werden. Ich stimme dem zu, aber wenn es passiert, verursacht es viel Schaden. Ich hoffe, ich finde bald eine Lösung.
Edit: Ein Kanal pro Registerkarte reduziert die Häufigkeit dieses Vorgangs. Aber es löst das Problem nicht vollständig.
Tags und Links google-app-engine channel-api