Недавно я анонсировал Realplexor — habrahabr.ru/blogs/hi/79189 — однопоточный событийно-ориентированный Comet-сервер, написанный на Perl и имеющий готовое API для JavaScript и PHP. С его помощью можно создавать сайты, пользователи на которых взаимодействуют друг с другом в реальном времени, не перезагружая страницу и без значительного расхода трафика.
Сегодня я хочу представить и, как водится, немного «покопаться в моторе» первой версии продукта Прямой эфир, работающей на платформе РуТвит с применением Realplexor-а. Это виджет, который вебмастер может за 1 минуту установить на свой сайт, чтобы устроить микроблоггинг-общение с аудиторией в режиме реального времени.
С помощью «Прямого эфира» аудитория сайта общается между собой в реальном времени — «прямо сейчас», находясь в отдельной «чат-комнате», привязанной к вашему сайту. Виджет можно использовать для «прямого диалога» сразу со многими пользователями: например, для приема багов или фич-реквестов. Если пользователь, с которым вы общались, всё еще на сайте, вы увидите его присутствие: около его имени будет зеленый кружочек.
Для начала общения посетителю сайта нет необходимости проходить процедуру регистрации. Авторизация производится по OpenID. Т.е. ему достаточно иметь аккаунт на Яндексе, Google, LiveJournal и т.д., чтобы начать писать сообщения; не требуется даже e-mail.
Для вставки виджета на сайт достаточно скачать кусочек HTML-кода со страницы rutvit.ru/tools/widgets/chat — кстати, там возможна кастомизация цветов и даже всего CSS, — и вставить его на любые (или даже на все) страницы вашего сайта:
Технически виджет представляет собой своеобразное JavaScript-приложение, загружаемое в тэг IFRAME. Это безопасно: т.к. содержимое IFRAME находится на другом домене, куки вашего сайта и DOM-дерево страницы ему недоступны.
Специальный JavaScript-код организует постоянное (long-polling) соединение с целой «батареей» серверов Realplexor и использует JavaScript API Realplexor-а. В отличие от обычного «polling», при котором скрипт должен раз в несколько секунд перезапрашивать данные с сервера, «long-polling», реализованный в Realplexor-е, работает гораздо оптимальнее. Он создает объект XMLHttpRequest, загружающий специальный URL на сервере Realplexor-а. При этом сервер «подвисает» и ничего не возвращает клиенту до тех пор, пока в чат не поступит новое сообщение (соединение может «висеть» хоть час, поэтому-то технология и называется «long polling»). Как только сообщение появилось, Realplexor передает его всем подключенным клиентам и закрывает соединение; клиент же создает новый объект XMLHttpRequest и снова соединяется с сервером. Также клиент пересоединяется с сервером в случае непредвиденного обрыва связи.
Realplexor поддерживает централизованный запуск/перезапуск/останов своего демона в виде целой «батареи» процессов, каждый из которых обслуживает независимый набор пользователей. Это позволяет оптимальнее использовать ресурсы CPU, компенсируя принципиальную однопоточность событийной модели. В случае виджета «Прямой эфир» владельцы сайтов равномерно распределяются по серверам; таким образом, мощность можно наращивать, устанавливая дополнительные машины. Однако даже одной машины достаточно во многих случаях: например, имея 8-ядерный процессор, можно запустить батарею Realplexor-ов из 8 процессов и получить 8-кратный прирост производительности.
OpenID-авторизация происходит внутри IFRAME; таким образом, авторизовавшись однажды на любом сайте с установленным «Прямым эфиром» (или просто будучи залогиненным в РуТвите), вы будете авторизованы и во всех остальных виджетах на других сайтах.
Технически все сообщения, написанные пользователями в виджете, хранятся в РуТвите с тэгом #ВашСайт (этот тэг вы можете изменить при установке). Таким образом, в виджете отображается ни что иное как твиты из канала #ВашСайт; виджет — это интерфейс для работы с микроблоггинг-сервисом сквозь призму вашего сайта.
У нас много идей по развитию виджета. Однако я буду рад обратной связи и новым идеям, позволяющим сделать «Прямой эфир» лучше. В частности, интересно мнение веб-мастеров: что бы вам хотелось иметь в таком виджете, чтобы он стал полезным для вас инструментом?
Было бы справедливо привести ссылки на похожие (в той или иной степени) продукты: 1 2 3 4 5. Ключевое отличие «Прямого эфира» от аналогов в том, что он построен на базе системы микроблоггинга, а не существует сам по себе «в вакууме».
Сегодня я хочу представить и, как водится, немного «покопаться в моторе» первой версии продукта Прямой эфир, работающей на платформе РуТвит с применением Realplexor-а. Это виджет, который вебмастер может за 1 минуту установить на свой сайт, чтобы устроить микроблоггинг-общение с аудиторией в режиме реального времени.
С помощью «Прямого эфира» аудитория сайта общается между собой в реальном времени — «прямо сейчас», находясь в отдельной «чат-комнате», привязанной к вашему сайту. Виджет можно использовать для «прямого диалога» сразу со многими пользователями: например, для приема багов или фич-реквестов. Если пользователь, с которым вы общались, всё еще на сайте, вы увидите его присутствие: около его имени будет зеленый кружочек.
Для начала общения посетителю сайта нет необходимости проходить процедуру регистрации. Авторизация производится по OpenID. Т.е. ему достаточно иметь аккаунт на Яндексе, Google, LiveJournal и т.д., чтобы начать писать сообщения; не требуется даже e-mail.
Для вставки виджета на сайт достаточно скачать кусочек HTML-кода со страницы rutvit.ru/tools/widgets/chat — кстати, там возможна кастомизация цветов и даже всего CSS, — и вставить его на любые (или даже на все) страницы вашего сайта:
<iframe src="http://rutvit.ru/tools/widgets/chat/embed?tag=ИмяИлиТэгВашегоСайта&q=Приветствие" width="280" height="400" style="border:1px solid #cccccc;overflow:hidden" frameborder="0"></iframe>
Как оно устроено внутри?
Технически виджет представляет собой своеобразное JavaScript-приложение, загружаемое в тэг IFRAME. Это безопасно: т.к. содержимое IFRAME находится на другом домене, куки вашего сайта и DOM-дерево страницы ему недоступны.
Специальный JavaScript-код организует постоянное (long-polling) соединение с целой «батареей» серверов Realplexor и использует JavaScript API Realplexor-а. В отличие от обычного «polling», при котором скрипт должен раз в несколько секунд перезапрашивать данные с сервера, «long-polling», реализованный в Realplexor-е, работает гораздо оптимальнее. Он создает объект XMLHttpRequest, загружающий специальный URL на сервере Realplexor-а. При этом сервер «подвисает» и ничего не возвращает клиенту до тех пор, пока в чат не поступит новое сообщение (соединение может «висеть» хоть час, поэтому-то технология и называется «long polling»). Как только сообщение появилось, Realplexor передает его всем подключенным клиентам и закрывает соединение; клиент же создает новый объект XMLHttpRequest и снова соединяется с сервером. Также клиент пересоединяется с сервером в случае непредвиденного обрыва связи.
Realplexor поддерживает централизованный запуск/перезапуск/останов своего демона в виде целой «батареи» процессов, каждый из которых обслуживает независимый набор пользователей. Это позволяет оптимальнее использовать ресурсы CPU, компенсируя принципиальную однопоточность событийной модели. В случае виджета «Прямой эфир» владельцы сайтов равномерно распределяются по серверам; таким образом, мощность можно наращивать, устанавливая дополнительные машины. Однако даже одной машины достаточно во многих случаях: например, имея 8-ядерный процессор, можно запустить батарею Realplexor-ов из 8 процессов и получить 8-кратный прирост производительности.
OpenID-авторизация происходит внутри IFRAME; таким образом, авторизовавшись однажды на любом сайте с установленным «Прямым эфиром» (или просто будучи залогиненным в РуТвите), вы будете авторизованы и во всех остальных виджетах на других сайтах.
Технически все сообщения, написанные пользователями в виджете, хранятся в РуТвите с тэгом #ВашСайт (этот тэг вы можете изменить при установке). Таким образом, в виджете отображается ни что иное как твиты из канала #ВашСайт; виджет — это интерфейс для работы с микроблоггинг-сервисом сквозь призму вашего сайта.
Вместо заключения
У нас много идей по развитию виджета. Однако я буду рад обратной связи и новым идеям, позволяющим сделать «Прямой эфир» лучше. В частности, интересно мнение веб-мастеров: что бы вам хотелось иметь в таком виджете, чтобы он стал полезным для вас инструментом?
Было бы справедливо привести ссылки на похожие (в той или иной степени) продукты: 1 2 3 4 5. Ключевое отличие «Прямого эфира» от аналогов в том, что он построен на базе системы микроблоггинга, а не существует сам по себе «в вакууме».