Модель API для технологий Push Server (COMET) - PullRequest
2 голосов
/ 02 августа 2009

Я хочу добавить поддержку событий на стороне сервера в CppCMS . Я понимаю техническую часть того, что делать на уровень связи: клиент отправляет длинный опрос XmlHTTPRequest и ожидает ответа, сервер принимает соединение и не отвечает, пока не произойдет событие на стороне сервера и не отправит ответ клиенту. Клиент повторяет процедуру.

Однако для большинства веб-разработчиков это слишком низкий уровень. Есть много вопросов: как управлять событиями, как управлять соединениями и т. Д.

Я думал о двух возможных моделях:

  1. Определены некоторые именованные события и сторона сервера, например, «Новое сообщение в чате № 134»; когда запрос принят, серверное приложение проверяет сообщения в комнате (например в БД) и если нет новых сообщений для клиента он подписывается на событие и ожидает его.

    Когда какой-либо другой клиент отправляет данные на сервер, он уведомляет все приложения о «Новое сообщение в чате № 134», и они просыпаются и отправляют эти сообщения клиентам и т. д.

    Эта модель по-прежнему выглядит довольно «низкоуровневой» моделью, но скрывает все методы уведомления.

  2. Другим вариантом является определение именованных очередей, поэтому каждый клиент создает такой Очередь при подключении к серверу и ждет новых сообщений. Когда какой-то клиент отправляет новое сообщение в «Комнату чата № 134», на стороне сервера оно транслируется во все очереди, подключенные к этой "Комнате чата № 134", и сообщение доставлено клиенту.

    Однако возникает много вопросов:

    • Как мне управлять очередями и уровнем сеанса на уровне одной страницы?
    • Как удалить очереди и создать для них тайм-ауты?
    • Что произойдет, если более чем одно «окно» будет подписано на одну очередь?
  3. Создать постоянный объект на стороне сервера, который склеивает между событиями на стороне сервера и пользовательские события. Он может связываться по отдельным запросам XHR, которые перенаправлен на него.

    Таким образом, клиент (JavaScript) регистрирует события и ждет их с помощью XHR и серверные отправленные уведомления о событиях, пока страница не будет перестроена.

Итак, я хотел бы знать, что является наиболее популярным и рекомендуемым Модели API за технологиями push на стороне сервера?

Спасибо

Редактировать : добавлен третий параметр

Ответы [ 3 ]

3 голосов
/ 12 августа 2009

Вы должны проверить XMPP PubSub , который определяет общий протокол публикации / подписки через XMPP. Существует также расширение XMPP, называемое BOSH (подробности протокола нижнего уровня отдельно описаны в XEP-0124 ), которое определяет механизм, который позволяет клиентам HTTP связываться с серверами XMPP с помощью длинного опроса (т. е. комета). Объединение этих двух спецификаций дает вам надежную модель подписки на события для веб-приложений, использующих комету. Даже если вы в конечном итоге не используете XMPP / BOSH, спецификации содержат некоторые ценные сведения о том, как может быть построена система такого типа.

Если вы в конечном итоге используете XMPP и BOSH, вот несколько инструментов, которые вам могут пригодиться:

  • StropheJS : библиотека для написания клиентских XMPP-клиентов, говорящих на BOSH.
  • Idavoll : универсальный компонент службы публикации-подписки для серверов XMPP.
  • Пенджаб : менеджер соединений BOSH, действующий как своего рода «перевод прокси» между HTTP-клиентами BOSH и вашим сервером XMPP.

По общему признанию, это очень тяжелое решение, и оно может не подходить для вашего конкретного применения, но много внимания было уделено этим стандартам, чтобы они могли быть полезны.

3 голосов
/ 10 августа 2009

Попробуйте Байе , это очень похоже на вашу первую модель. Клиент подписывается на канал"чат / новое сообщение / 134". Если появятся новые сообщения , сервер будет транслировать сообщения подписчикам .

Вы можете использовать групповое имя канала для подписки на несколько комнат "chatroom / new-message / *" (только трейлинг)

0 голосов
/ 10 августа 2009

Не существует общего решения, подходящего для всех приложений. Если вы хотите узнать о некоторых общих шаблонах, взгляните на Event-Driven Architectures .

Есть несколько слайдов онлайн с презентации, которую я посетил однажды (это довольно общее представление по теме).

...