воскресенье, 26 сентября 2010 г.

Comet — обзорная статья

Данная статья написана исходя из собственного опыта и является скорее поводом к обсуждению технологии, нежели к попытке полноценно осветить тему :)

Что такое 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 — обзорная статья

Комментариев нет:

Отправить комментарий