API канала механизма приложений не возвращает сообщений - PullRequest
2 голосов
/ 03 августа 2011

Описание проблемы: сообщения канала не возвращаются в сценарий ajax. Изначально сообщения доставляются на сторону клиента, но проблема возникает, когда я устанавливаю большее время ожидания в js:

goog.appengine.Socket.POLLING_TIMEOUT_MS = 5000; // опрос каждые 5 секунд

Я добавил очень простой код Python, чтобы проверить, работает ли Channel API в моем приложении Google App Engine.

index:
token = channel.create_channel(CHANNEL_NAME)
channel.send_message(CHANNEL_NAME, message)
#token is passed to template

additional_view:
#is another view, trigger manually from browser after index
from django.utils import simplejson
channel.send_message(CHANNEL_NAME, simplejson.dumps(data))

На стороне клиента у меня есть обычный js с кодом onMessage.

Проблема в том, что никакие сообщения не возвращаются запросам на стороне клиента. Все они приходят пустыми в опрос Ajax (как видно в Firebug). В журнале приложения видно, что канал создан:

"Создание токена канала channel-2382918168-широковещания с передачей идентификатора клиента" и позже сообщение отправляется, но с комментарием:

между ними приходят эти запросы:

INFO     2011-08-03 14:33:32,000 dev_appserver.py:4248] "POST /_ah/channel/connected/ HTTP/1.1" 404 -
INFO     2011-08-03 14:33:33,780 dev_appserver.py:4248] "POST /_ah/channel/disconnected/ HTTP/1.1" 404 -

** .... текст сообщения ... на канал с ключом (широковещание): клиенты не подключены ***

Как работает канал / сообщение на более глубоком уровне? Потеряны ли сообщения, если ни один клиент не подключен или они были получены вновь подключенными клиентами? Если по какой-то причине я создам канал с таким же именем, он будет разрушать недоставленные сообщения, которые он имеет внутри?

1 Ответ

6 голосов
/ 03 августа 2011

Не устанавливайте POLLING_TIMEOUT_MS выше 1,5 с, dev_appserver будет считать, что вы отключились.

Он не работает через опрос в производственной среде, поэтому вам не нужно беспокоиться о тайм-ауте.

Редактировать : только что увидел комментарий Роберта; лично у меня даже были проблемы, если я установил опрос в 3sec в Chrome / Safari / Firefox. Теперь у меня есть только ?disable_channel=true строк запросов в моих приложениях, чтобы я мог их запускать, не поджигая свой ноутбук из-за загрузки процессора.

...