19.12.2009 19:16
На данный момент существует несколько поисковиков в реальном времени, а так же несколько экспериментов от гигантов вроде компании Google. Остаются не решенными некоторые практические вопросы, например определение релевантности в поисковой выдаче, но сама технология трансляции данных в браузер пользователя вполне работоспособна.
Начать следует с протокола HTTP. Как все, я надеюсь, знают этот протокол не сохраняет своего статуса между запросами, что подразумевает типичный алгоритм запрос-ответ для работы с ним. Именно таким образом и происходило взаимодействие с интернетом до 2005 года, в котором сформировалась технология AJAX позволяющая делать запросы к серверу уже после загрузки страницы. Эта технология сейчас очень популярна, а сайты и веб-приложения использующие её, объединяют термином web 2.0. Вот так выглядит общение браузера и сервера:
пример асинхронных запросов в AJAX — short polling
Такой тип взаимодействия называется polling (от англ. poll — тянуть), именно вытягиванием данных и занимается браузер. Преимущества перед полным обновлением страницы очевидны, но есть и недостатки. Главным из них является «холостая работа» — часто браузер делает сотни запросов, а в ответ узнает, что новых данных нет. Именно для решения этой проблемы и появилась технология long polling, позволяющая делать запросы, которые возвращают результат как только он появляется. Пример взаимодействия:
пример долгих асинхронных запросов — long polling
Эта техника является золотой серединой между простым AJAX'ом и сложным HTTP-streaming, который также называют HTTP server push или Comet. Главным преимуществом является то, что клиент создает всего одно соединение, через которое получает данные от сервера в реальном времени! Главными недостатками можно назвать сложность реализации и несоответствие духу протокола HTTP.
схема работы Comet — HTTP-streaming
Интерактив между пользователем и сервером мы уже рассмотрели, но становится понятно, что для создания веб-приложений реального времени не подходят технологии использующиеся для обычных сайтов. Для того, чтобы передавать и обрабатывать данные в реальном времени часто используют событийное (англ. event-based) программирование, в большинстве языков программирования существуют фрэймворки для разработки такого рода приложений: для Python — это Twisted, Yaws для Erlang, Jetty для Java, а для Perl популярными являются POE и AnyEvent. О последнем я расскажу в одной из следующих статей.
863 просмотра
4 комментария