Potrzebuję aplikacji, która często wymaga odpytywania serwera, ale GAE ma ograniczenia dotyczące żądań, więc wiele wniosków może być bardzo kosztownych. Czy możliwe jest użycie długiego sondowania i sprawdzenie, czy żądania oczekują na maksimum 30 sekund na zmiany?Czy długo trwa polling w Google App Engine?
Odpowiedz
Google AppEngine ma nową funkcję kanału API, z tym masz się possibility to build a good realtime application.
Innym rozwiązaniem jest użycie trzeciej części komety, takiej jak mochiweb lub skręconej ze wzorem iframe.
Klient1, czeka na zdarzenie:
client1 --Iframe Pattern--> Erlang/Mochiweb(HttpLongPolling):
Klient2, wysyłając wiadomość:
client2 --XhrIo--> AppEngine --UrlFetch--> Erlang/Mochiweb
Aby korzystać mochiweb z komety wzór, Richard Jones napisał dobrą temat (na google: Richard Jones A Million-user Comet Application).
Nie sądzę, że długie głosowanie jest możliwe. Domyślny limit czasu żądania dla Google Appengine wynosi 30 sekund. W przypadku długiego sondowania, jeśli wygenerowanie wiadomości trwa dłużej niż 30 sekund, oznacza to, że nie udało się. Prawdopodobnie lepiej jest używać krótkiego sondowania.
Innym podejściem jest "symulowanie" długiego sondowania z limitem 30 sekund. Aby to zrobić, jeśli wiadomość nie dotrze w ciągu, powiedzmy 20 sekund, serwer może wysłać wiadomość "token" zamiast zwykłej wiadomości, wymagając, aby klient ją zużył i ponownie się połączył.
Wydaje się feature request (i jego zaakceptowane) w Google AppEngine za długi odpytywania
Google App Engine ma teraz interfejs API kanału obsługujący długie pollingy. –
@ Sprawdź, kiedy pytanie zostało zaksięgowane i udzielono odpowiedzi, Długie głosowanie nie było wtedy możliwe. – naikus
Ups, moje złe ... –
Próbowaliśmy wdrożyć rozwiązanie Comet-like long-polling na App Engine, z różnymi wynikami.
def wait_for_update(request, blob):
"""
Wait for blob update, if wait option specified in query string.
Otherwise, return 304 Not Modified.
"""
wait = request.GET.get('wait', '')
if not wait.isdigit():
return blob
start = time.time()
deadline = start + int(wait)
original_sha1 = blob.sha1
try:
while time.time() < deadline:
# Sleep one or two seconds.
elapsed = time.time() - start
time.sleep(1 if elapsed < 7 else 2)
# Try to read updated blob from memcache.
logging.info("Checking memcache for blob update after %.1fs",
elapsed)
blob = Blob.cache_get_by_key_name(request.key_name)
# Detect changes.
if blob is None or blob.sha1 != original_sha1:
break
except DeadlineExceededError:
logging.info("Caught DeadlineExceededError after %.1fs",
time.time() - start)
return blob
Problem, który widzę, polega na tym, że żądania po długim głosowaniu są seryjizowane (synchronizowane) za żądaniem długo odpytywania. Mogę spojrzeć na ślad w Chrome i zobaczyć oś czasu podobną do tej:
- Prośba o wysłanie 1. GET (niezmodyfikowany) blob (poczekaj, aż zmieniony).
- Żądanie 2 wysłane. Zmodyfikuj obiekt typu blob.
- Po pełnym limicie czasu żądanie 1 powraca (dane niezmodyfikowane).
- Żądanie 2 zostaje przetworzone na serwerze i zwraca sukces.
Użyłem Wireshark i Chrome/linii czasu, aby potwierdzić, że wysyłam zapytanie o modyfikację do serwera na osobnym połączeniu TCP z long-polling. Tak więc snychronizacja musi się odbywać na serwerze produkcyjnym App Engine. Google nie dokumentuje tych szczegółów zachowania serwera, o ile wiem.
Myślę, że czekanie na kanał API to najlepsza nadzieja na uzyskanie dobrego zachowania w czasie rzeczywistym z App Engine.
- 1. Google App Engine APNS
- 2. Google App Engine: get_or_create()?
- 3. Google App Engine Geohashing
- 4. Retrolambda w Google App Engine
- 5. Google App Engine
- 6. web.py w Google App Engine
- 7. Android In-App-rozliczenie zwrotu/anulowania trwa długo
- 8. Jak szybki jest Google App Engine?
- 9. Czy Google App Engine obsługuje ftp?
- 10. Czy Google App Engine obsługuje Python 3?
- 11. Google App Engine wiele regionów
- 12. Google App Engine/_ah/zdrowie
- 13. Google App Engine vs WebFaction
- 14. Google App Engine: Kontyngent Błąd
- 15. Google App Engine Konwerter PDF
- 16. OpenID dla Google App Engine
- 17. Google App Engine kopiowanie nadawcy
- 18. Jak długo trwa pakiet?
- 19. Google App Engine dziwne opóźnienie
- 20. Benchmarki dla różnych operacji Datastore w Google App Engine?
- 21. Google Cloud Datastore vs Google App Engine
- 22. Google App Engine JDO 3
- 23. Google App Engine lub Django?
- 24. Google App Engine modifyThreadGroup problemem
- 25. UIActionSheet trwa długo odpowiedź:
- 26. Co _ znaczy w Google App Engine?
- 27. Wątek Lokalny w Google App Engine (GAE)
- 28. Usługi GIS w Google App Engine
- 29. Domyślne wartości modeli w Google App Engine
- 30. Pomiar w usłudze Google App Engine
Interfejs API kanału nie jest jeszcze publiczny. Oto dwie alternatywne usługi, które można sprawdzić: http://beaconpush.com http://pubnub.com –
Uwaga: interfejs API kanału zostanie wycofany i zamknięty w październiku 2017 r. – Suma