Защита от пропущенных сообщений в AppEngine Channel API

В AppEngine Channel API каналы автоматически закрываются через 2 часа. Мы обрабатываем это, присоединяясь к каналу в событии onError.

Есть ли шанс, что сообщения могут быть пропущены, если они будут отправлены во время переподключения канала?

Наш сценарий: у нас есть система планирования встреч, в которой встречи бронируются в другом месте через API. Мы используем канал для отображения новых встреч в расписании по мере их поступления. Но я обеспокоен тем, что некоторые встречи могут быть пропущены, если они забронированы в то время, когда канал закрыт и снова подключен. Защищает ли Channel API от этого?


person Kyle Baley    schedule 19.12.2011    source источник


Ответы (2)


Немного предыстории: «идентификатор клиента» в Channel API используется для создания временной конечной точки XMPP. Данный идентификатор клиента всегда будет отображаться на одну и ту же временную конечную точку. Поэтому, когда вы повторно подключаетесь с помощью токена к каналу, созданному с тем же идентификатором клиента, вы повторно подключаетесь к той же конечной точке. Из-за этого вы можете увидеть поведение, при котором ваш клиент получает сообщения, отправленные до повторного создания канала. Но нет никаких гарантий, и мы не ставим в очередь сообщения, когда они отправляются на канал без прослушивающих клиентов.

В вашем случае вы могли бы вернуть актуальный список встреч как часть того же ответа, который возвращает новый токен?

person Moishe Lettvin    schedule 19.12.2011
comment
Да, мы планируем это сделать. Спасибо за информацию. - person Kyle Baley; 13.01.2012

Вы не «переподключаете» канал, вы создаете совершенно новый — так что да, сообщения могут быть пропущены. Однако вы должны получить исключение, если попытаетесь отправить сообщение на закрытый канал.

person Nick Johnson    schedule 19.12.2011