API канала движка приложения не возвращает сообщений

Описание проблемы: сообщения канала не возвращаются в 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-broadcast с широковещательной передачей идентификатора клиента" и позже отправляется сообщение, но с комментарием:

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

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 -

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

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


person AlexA    schedule 03.08.2011    source источник
comment
В каких браузерах вы пытались настроить тайм-аут? Вы пробовали меньшие значения? Насколько я помню, я видел, как это происходило в некоторых браузерах при использовании задержки опроса в 3 секунды или больше.   -  person Robert Kluin    schedule 03.08.2011
comment
Попробовал Фаерфокс 3.6. Меньшие значения работают. Просто хотел сделать меньше запросов ajax, но я думаю, что это как-то противоречит правилам API канала.   -  person AlexA    schedule 04.08.2011


Ответы (1)


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

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

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

person Chris Farmiloe    schedule 03.08.2011
comment
технически это опрос... но это долгий опрос, поэтому тайм-аут между запросами на самом деле не применяется, поскольку соединение остается открытым до тех пор, пока не поступят данные. Это невозможно с dev-сервером из-за того, что он однопоточный и поэтому может обслуживать только один запрос за раз. - person Chris Farmiloe; 04.08.2011
comment
Я часто использую 1 или 2 секунды задержки без проблем. Мне также нравится идея просто сделать disable_channel, когда вы не тестируете работу над этими функциями приложения. - person Robert Kluin; 04.08.2011