Мне нужно сделать приложение, которое нужно часто опросить сервер, но GAE имеет ограничения на запросы, поэтому сделать много запросов может быть очень дорогостоящим. Можно ли использовать длительный опрос и запрашивать ожидания до максимума 30 секунд для изменений?Возможно ли длительный опрос в Google App Engine?
ответ
Google AppEngine имеет новый API особенность канала, с этим у вас есть с possibility to build a good realtime application.
Другое решение - использовать кометный сервер третьей части, такой как mochiweb или скрученный с шаблоном iframe.
Client1, ожидая событие:
client1 --Iframe Pattern--> Erlang/Mochiweb(HttpLongPolling):
Client2, отправив сообщение:
client2 --XhrIo--> AppEngine --UrlFetch--> Erlang/Mochiweb
Чтобы использовать mochiweb с кометой рисунком, Ричард Джонс написал хорошую тему (на Google: Ричард Jones A Million-user Comet Application).
Я не думаю, что длительный опрос возможен. Таймаут запроса по умолчанию для Google appengine составляет 30 секунд. При длительном опросе, если для генерации сообщения требуется более 30 секунд, он будет терпеть неудачу. Возможно, вам лучше использовать короткий опрос.
Другой подход - «имитировать» длительный опрос с ограничением 30 секунд. Чтобы сделать это, если сообщение не поступило, скажем, 20 секунд, сервер может отправить сообщение «токен» вместо обычного сообщения, требуя, чтобы клиент использовал его и снова подключился.
Там, кажется feature request (и его приняли) на Google AppEngine для длительного опроса
В Google App Engine теперь есть API каналов для поддержки длительного опроса. –
@Zhe проверить, когда вопрос был отправлен и ответил, Лонг-опрос не был возможен. – naikus
К сожалению, мой плохой ... –
Мы попытались реализовать кометное решение для долгого опроса в App Engine со смешанными результатами.
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
Проблема, которую я вижу в том, что запросы после долгого-опроса один, получают Serialize (синхронное) за запрос давно опроса. Я могу посмотреть на след в Chrome и посмотреть график:
- Запрос 1 на адрес. GET (un-modified) blob (дождитесь изменения).
- Запрос 2 на отправке. Измените blob.
- После полного тайм-аута запрос 1 возврат (данные немодифицированы).
- Запрос 2 обрабатывается на сервере и возвращает успех.
Я использовал wirehark и Chrome/timeline для подтверждения того, что я посылаю запрос модификации на сервер на отдельном TCP-соединении из длинного опроса. Таким образом, эта snychronization должна происходить на сервере производства App Engine. Насколько я знаю, Google не документирует эту деталь поведения сервера.
Я думаю, что ожидание API канала - лучшая надежда на то, что мы получаем хорошее поведение в режиме реального времени от App Engine.
- 1. Длительный процесс Google App Engine, который должен быть возвращен потребителю
- 2. Длительный опрос Angularjs
- 3. Частота опроса AJAX - длительный опрос или не длительный опрос?
- 4. Длительный опрос весной
- 5. Длительный опрос без петли
- 6. Django + Pydev/Eclipse + Google App Engine - возможно?
- 7. Невозможно осуществить длительный опрос
- 8. Возможно ли запустить Bitcoin в Google App Engine?/альтернативы?
- 9. Возможно ли сохранить нормализованную модель в Google App Engine?
- 10. Возможно ли передавать данные в Google App Engine?
- 11. Длительный опрос слишком быстро
- 12. Использует ли длительный опрос CometD постоянное соединение?
- 13. Имеет ли длительный опрос лимит соединений?
- 14. Можно ли длительный опрос с XPages?
- 15. Действительно ли длительный опрос работает лучше, чем периодический опрос ajax?
- 16. Возможно ли выполнить задачу внутри задачи Google App Engine?
- 17. Возможно ли получить много объектов вместе с Google App Engine?
- 18. Google App Engine: возможно ли выполнить запрос Gql LIKE?
- 19. Возможно ли использовать Google App Engine с открытым доменом?
- 20. google app engine
- 21. Google App Engine/_ah/здоровье
- 22. Длительный опрос AJAX, повышение эффективности
- 23. Длительный опрос, отсчитываемый от браузера
- 24. работает в Google App Engine?
- 25. Это приложение использует длительный опрос?
- 26. PHP в Google App Engine
- 27. Lamson в Google App Engine?
- 28. Google App Engine: DeadlineExceededError
- 29. AJAX Длительный опрос не работает
- 30. Как работает длительный опрос javascript?
Канал API еще не открыт. Вот еще две альтернативные услуги: http://beaconpush.com http://pubnub.com –
Примечание. Канал API будет прекращен и закрыт в октябре 2017 года. – Suma