Что такое COMET?
Comet неологизм, описывающий модель работы веб-приложения. В обычном цикле обработки запроса, клиент инициирует соединение и запрашивает интересующий его документ. После отдачи данных, связь разрывается. В случае с Сomet, сервер инициирует соединение и отправляет клиенту сообщение. Типичный пример Comet это оповещения в Facebook, Twitter, чат в Gmail и др.
Существующие подходы
Существует несколько основных подходов как достичь желаемого результата.
* Polling: Достатоно простой метод, основанный на переодическом опрашивании сервера;
* Long poll: Способ при котором клиент открывает соединение и не закрывает его до тех пор, пока не наступит событие. По наступлению события, клиент получает оповещение и снова открывает соединение;
* «бесконечный» iframe: Метод основан на особенностях загрузки html документов. Создается невидимый iframe, который читает «бесконечный» файл. При наступлении события, добавляется новая строка в файл. Строка может быть кодом javascript, который исполниться, при получении на клиенте;
* Flash сокеты: Простой метод, при загрузке страницы, создается сокет, который слушает сервер. При наступлении события, сервер посылает команду клиенту на слушающий сокет, на определенный порт;
* HTML5 WebSockets: Метод похож на метод с Flash сокетом, за исключением того, что сокет создается нативными средствами браузера.
* другие методы
У каждого из методов есть свои плюсы и минусы. Ниже приведена страница сравнения основанная на собственном опыте.
Метод | Сложность реализации | Поддерживаемые браузеры | Требовательность к ресурсам |
---|---|---|---|
Polling | Просто | Все возможные браузеры | В зависимости от настроек, может создавать достаточно большой трафик |
Long poll | Средне | Все возможные браузеры | На каждого клиента создается соединение, которое остается открытым, до тех пор, пока не произойдет событие или пользователь не уйдет со страницы |
«бесконечный» iframe | Много нюансов, в зависимости от браузера | Практически все | Соединение постоянно открыто |
Flash сокеты | Достаточно просто | Все браузеры, с поддержкой Flash | |
HTML5 WebSocet | Просто | Chrome, + |
Технологии
Реализовывать самостоятелньо один из методов — достаточно трудоемкий процесс, за исключением наверно обычного pollingа. Поэтому целесообразно использовать готовые решения. Часто они реализованы как самостоятельные push-сервера. Для взаимодействия с приложением, могут применяться различные интерфейсы, зависящие от конкретной реализации. Как пример это может быть js api, RESTfull запросы, протокол AMQP и другие.
Тут можно посмотреть таблицу наиболее популярных комерческих и свободных разработок:
Помимо этого стоит отдельно отметить такие разработки как APE, Hookbox, Juggernaut и Mochiweb.
Интеграция с ruby
Первое что выдает google, при наборе: «comet + ruby» это библиотека Juggernaut. На сайте есть отличная документация. Устанавливается все за 5 минут. В принципе достойное решение для внутренних проектов. Некоторые его используют также в production. Из недостатков следует отметить два момента: первый, необходимо иметь установленный flash на браузере и второй, существуют проблемы при работе из-за файрвола.
Следующий вариант APE (Ajax Push Engine). Довольно новая разработка. Состоит из трех основных частей: Javascript framework, Push сервера и протокола. Проект бесплатный, выдерживает большие нагрузки и работет во всех браузерах. Для взаимодейтсвия с приложением, использует свой протокол, команды передаются в формате JSON. Интеграция с Rails приложением немного болезненна из-за несоответсвия путей но тем не менее, запустить можно достаточно быстро. Из минусов можно выделить то, что Javascript framework достаточно много весит.
Один из самых удобных и надежных решений по моему мнению — hookbox. Написан теми же разработчиками что и orbited. Проект был существенно упрощен и исправлены многие баги. Состоит также из трех компонентов: push сервер, js библиотека и протокол. Интеграция с приложением реализована с помощью REST запросов. Два недостатка которые были обнаружены: проблема с мигающим курсором в Opera и некоторые проблемы с push сервером, при длительном простое.
Полезные ресурсы
Общая информация
Статья в википедии
HTTP streaming
Материалы с сайта javascript.ru
Comet maturity guide
Nginx & Comet
Nginx http push server
WebSockets
Реализации
Hookbox
Mochiweb
Juggernaut
Ajax Push Engine
Примеры реализации в ruby и RoR
Comet & Ruby & Redis
Comet demo for ruby on rails
Ruby & Orbited
Orbited & Ruby
APE & Rails
Comet & Orbited #1
Comet & Orbited #2
Comet & Orbited #3
php simple chat example
Источник: Хабрахабр - Web-разработка
Оригинальная страница: Comet — обзорная статья
Комментариев нет:
Отправить комментарий