Как я могу реализовать обмен сообщениями в режиме реального времени в Google AppEngine?
Я создаю веб-приложение в Google AppEngine, где хочу, чтобы пользователь получал уведомления как можно быстрее после определенных событий. Проблема похожа на сервер чата, потому что мне нужно, чтобы что-то происходило с одним соединением (кто-то пишет сообщение в комнате чата) для передачи на ряд других соединений (другие люди в этой комнате чата получают сообщение). Чтобы получить быстрые обновления от сервера к клиенту, я планирую использовать длинный опрос с XmlHttpRequest, надеясь, что AppEngine не будет мешать, кроме возможного ограничения времени ожидания. Однако реальная проблема заключается в эффективном уведомлении между соединениями в AppEngine.
Есть ли какая-либо поддержка для этого типа уведомления о перекрестном соединении в AppEngine, которая не включает ожидание занятости? Единственными инструментами, которые я могу придумать, чтобы сделать это вообще, является использование хранилища данных (медленное) или memcache (ненадежное), и ни один из них не позволил бы мне избежать ожидания занятости.
Примечание: я знаю о поддержке XMPP в AppEngine. Это связано, но я хочу решение на основе браузера, отправка сообщений пользователям по XMPP не вариант.
3 ответа
Запросы к App Engine ограничены временем выполнения 30 секунд, что затрудняет длительный опрос. Кроме того, вам нужно сохранять среднее время выполнения низким, или у вас очень быстро закончатся экземпляры для выполнения ваших запросов - App Engine предоставит новые экземпляры только в том случае, если ваше приложение достаточно быстрое. По этим причинам, Long Polling крайне не рекомендуется в App Engine.
Тем не менее, если вы готовы подождать некоторое время, план действий включает в себя "Поддержку взаимодействия Browser Push (Comet)", что именно то, что вы ищете.
Дорожная карта App Engine имеет поддержку Comet, в противном случае вам будет трудно это сделать.
Вы всегда можете использовать размещенный кометный сервис, такой как WebSync On-Demand. Это позволит вам выдвигать события независимо от того, какой тип сервера вы используете для хостинга.