Ich muss Anwendungen erstellen, die häufig den Server abfragen müssen, aber GAE hat Einschränkungen bei Anfragen, sodass viele Anfragen sehr teuer werden können. Ist es möglich, langes Polling zu verwenden und Anforderungen für maximal 30 Sekunden auf Änderungen warten zu lassen?
Google AppEngine hat eine neue Funktion Channel API, mit der Sie haben eine Möglichkeit, eine gute Echtzeitanwendung zu erstellen .
Eine andere Lösung ist die Verwendung eines dritten Komet-Servers wie mochiweb oder mit einem iframe-Muster verdreht.
Client1, wartet auf ein Ereignis:
%Vor%Client2, Senden einer Nachricht:
%Vor%Um mochiweb mit dem Kometenmuster zu verwenden, hat Richard Jones ein gutes geschrieben Thema (auf Google: Richard Jones Eine Million-Benutzer-Komet-Anwendung).
Wir haben versucht, eine Comet-ähnliche Lösung für lange Abfragen in App Engine mit gemischten Ergebnissen zu implementieren.
%Vor%Das Problem, das ich sehe, ist, dass Anfragen, die einer langen Abfrage folgen, serialisiert (synchronisiert) werden hinter der Abfrage für lange Abfragen. Ich kann eine Spur in Chrome ansehen und sehe eine Zeitleiste wie folgt:
Ich habe wireshark und Chrome / timeline verwendet, um zu bestätigen, dass ich die Änderungsanforderung vom Server an eine bestimmte TCP-Verbindung von der langen Abfrage gesendet habe. Diese Synchronisierung muss daher auf dem App Engine-Produktionsserver erfolgen. Soweit ich weiß, dokumentiert Google dieses Detail des Serververhaltens nicht.
Ich denke, das Warten auf die Channel-API ist die beste Hoffnung auf gutes Echtzeitverhalten von App Engine.
Ich denke nicht, dass lange Umfragen möglich sind. Das Standard-Anfrage-Timeout für Google Appengine beträgt 30 Sekunden. Wenn die Nachricht länger als 30 Sekunden zum Generieren benötigt, schlägt sie fehl. Sie sind wahrscheinlich besser dran mit kurzen Umfragen.
Ein anderer Ansatz besteht darin, lange Abfragen mit der 30-Sekunden-Grenze zu simulieren. Um dies zu tun, wenn eine Nachricht nicht innerhalb von beispielsweise 20 Sekunden ankommt, kann der Server eine "Token" -Nachricht anstelle einer normalen Nachricht senden, die den Client benötigt, um sie zu konsumieren und erneut zu verbinden.
Es scheint eine Funktionseinforderung (und deren Akzeptanz) für Google Appengine zu geben lange Umfrage
Tags und Links google-app-engine long-polling