Ho bisogno di creare un'applicazione che ha bisogno di interrogare il server spesso, ma GAE ha delle limitazioni sulle richieste, quindi fare molte richieste potrebbe essere molto costoso. È possibile utilizzare il polling lungo e fare richieste attendere il massimo 30 secondi per le modifiche?Il polling lungo è possibile in Google App Engine?
risposta
Google AppEngine ha una nuova API funzione del canale, con che avete un possibility to build a good realtime application.
Un'altra soluzione è utilizzare un server comet di terze parti come mochiweb o intrecciato con un modello iframe.
Client1, in attesa di un evento:
client1 --Iframe Pattern--> Erlang/Mochiweb(HttpLongPolling):
Client2, l'invio di un messaggio:
client2 --XhrIo--> AppEngine --UrlFetch--> Erlang/Mochiweb
Per utilizzare mochiweb con il modello cometa, Richard Jones ha scritto un buon argomento (su google: Richard Jones: un'applicazione per la cometa da milioni di utenti).
Non penso che il polling lungo sia possibile. Il timeout della richiesta predefinito per google appengine è di 30 secondi. Nel polling lungo se il messaggio impiega più di 30 secondi per generare, allora fallirà. Probabilmente stai meglio usando il polling breve.
Un altro approccio consiste nel "simulare" il polling lungo con il limite di 30 secondi. Per fare ciò se un messaggio non arriva entro 20 secondi, il server può inviare un messaggio "token" al posto di un messaggio normale, richiedendo al client di consumarlo e riconnettersi.
sembra che ci sia feature request (e la sua accettato) su google AppEngine per polling lungo
Google App Engine ora ha API canale per supportare il polling lungo. –
@Controlla quando la domanda è stata inviata e ha risposto, Non è stato possibile effettuare il polling lungo. – naikus
Oops, mio male ...L'API del canale –
Abbiamo provato a implementare una soluzione di polling a lungo simile a Comet su App Engine, con risultati misti.
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
Il problema che sto vedendo è che le richieste a seguito di un lungo polling, sono sempre serialize (sincronizzato) dietro la richiesta a lungo polling. Posso osservare una traccia in Chrome e vedere una timeline come questa:
- Richiesta 1 inviata. GET (non modificato) blob (attendere fino a modifica).
- Richiesta 2 inviata. Modifica il BLOB.
- Dopo il timeout completo, la richiesta 1 restituisce (dati non modificati).
- La richiesta 2 viene elaborata sul server e restituisce esito positivo.
Ho usato Wireshark e Chrome/sequenza temporale per confermare che io mando la richiesta di modifica al server su una connessione TCP distinto dal lungo polling. Quindi questa sincronizzazione deve essere saltata sul server di produzione di App Engine. Google non documenta questo dettaglio del comportamento del server, per quanto ne so.
Penso che attendere l'API del canale è la migliore speranza che abbiamo di ottenere un buon comportamento in tempo reale da App Engine.
- 1. Il polling lungo è possibile con un'applicazione Rails utilizzando EventMachine?
- 2. polling vs polling lungo
- 3. Django + Pydev/Eclipse + Google App Engine - possibile?
- 4. Polling lungo in Yesod
- 5. Google App Engine Geohasing
- 6. È possibile impedire DoSing su Google App Engine?
- 7. È possibile utilizzare Django 1.2 su Google App Engine?
- 8. Google App Engine APNS
- 9. Grails su Google-App-Engine - È morto?
- 10. Google-app-engine NDB
- 11. appengine_config.py in Google App Engine
- 12. Google App Engine
- 13. È possibile non configurare il dominio personalizzato di Google App Engine senza pagare per Google Apps?
- 14. Google App Engine: get_or_create()?
- 15. Quanto è veloce Google App Engine?
- 16. Google App Engine è adatto a me?
- 17. Polling lungo con NSURLConnection
- 18. Il framework Meteor JS è compatibile con Google App Engine?
- 19. web.py su Google App Engine
- 20. Registrazione dell'applicazione Google App Engine
- 21. Google App Engine supporta ftp?
- 22. Come impostare il timeout per urlfetch in Google App Engine?
- 23. Posso utilizzare Goroutine in Google App Engine?
- 24. Google App Engine su dominio Google Apps
- 25. RxJava + Retrofit polling lungo
- 26. Google App Engine e il paging
- 27. Pretty URL in Google App Engine
- 28. Google App Engine come piattaforma di produzione
- 29. Impossibile distribuire Android App Engine progetto su Google App Engine
- 30. OpenID per Google App Engine
non è ancora pubblica. Ecco altri due servizi alternativi da verificare: http://beaconpush.com http://pubnub.com –
Nota: l'API di canale verrà interrotta e chiusa a ottobre 2017. – Suma