В последнее время часто можно услышать выражение real-time web, за которым, как говорят, будущее интернета. По сути, это набор технологий, который позволяет получать в реальном времени данные добавляемые в сеть. Частным случаем этой идеи является real-time search — поиск в реальном времени.
comet

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


Начать следует с протокола HTTP. Как все, я надеюсь, знают этот протокол не сохраняет своего статуса между запросами, что подразумевает типичный алгоритм запрос-ответ для работы с ним. Именно таким образом и происходило взаимодействие с интернетом до 2005 года, в котором сформировалась технология AJAX позволяющая делать запросы к серверу уже после загрузки страницы. Эта технология сейчас очень популярна, а сайты и веб-приложения использующие её, объединяют термином web 2.0. Вот так выглядит общение браузера и сервера:
Технология short polling
пример асинхронных запросов в AJAX — short polling

Такой тип взаимодействия называется polling (от англ. poll — тянуть), именно вытягиванием данных и занимается браузер. Преимущества перед полным обновлением страницы очевидны, но есть и недостатки. Главным из них является «холостая работа» — часто браузер делает сотни запросов, а в ответ узнает, что новых данных нет. Именно для решения этой проблемы и появилась технология long polling, позволяющая делать запросы, которые возвращают результат как только он появляется. Пример взаимодействия:
Технология long polling
пример долгих асинхронных запросов — long polling

Эта техника является золотой серединой между простым AJAX'ом и сложным HTTP-streaming, который также называют HTTP server push или Comet. Главным преимуществом является то, что клиент создает всего одно соединение, через которое получает данные от сервера в реальном времени! Главными недостатками можно назвать сложность реализации и несоответствие духу протокола HTTP.
Технология http-streaming или comet
схема работы Comet — HTTP-streaming

Интерактив между пользователем и сервером мы уже рассмотрели, но становится понятно, что для создания веб-приложений реального времени не подходят технологии использующиеся для обычных сайтов. Для того, чтобы передавать и обрабатывать данные в реальном времени часто используют событийное (англ. event-based) программирование, в большинстве языков программирования существуют фрэймворки для разработки такого рода приложений: для Python — это Twisted, Yaws для Erlang, Jetty для Java, а для Perl популярными являются POE и AnyEvent. О последнем я расскажу в одной из следующих статей.
863 просмотра
4 комментария

Мнения ↓

Alger
19.12.2009 20:09
Alger aka Alger
Ждем-с, когда кьюби-поиск станет работать на этой технологии! :)
Егор
19.12.2009 20:36
Егор aka Sontan
Главный вопрос в том, где стоит применять эту технологию. Но сейчас, когда на сервере поднята вся инфраструктура для Comet, можно будет перевести некоторые старые и добавить пару новых сверхдинамичных сервисов :)
Alger
20.12.2009 11:07
Alger aka Alger
Как насчет того, чтобы на Qb сделать что-то вроде календаря дат и праздников? Чтобы например можно было вставлять информер на другие сайты, добавлять для себя свой заметки к датам? Такого в байнете по-мойму никогда небыло.
Егор
23.12.2009 14:37
Егор aka Sontan
Здесь дело в базе тех самых дат, есть хороший сайт calend.ru, часть разработчиков которого из Беларуси :)
Только зарегистрированные пользователи могут оставлять комментарии.
Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
© sontan.name, 2008–2010