Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Centrifuge — так легко, как допустимо, но не проще этого

Anna | 16.06.2014 | нет комментариев
Здравствуй!

Продолжая статьи о Центрифуге, мне хотелось бы обсудить один из методов подключения реал-тайм событий на сайт.

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

Давайте посмотрим, что нам предлагает Центрифуга:

var centrifuge = new Centrifuge({
url: ‘http://localhost:8000/connection’,
token: ‘TOKEN’,
project: ‘PROJECT_ID’,
user: ‘USER_ID’
});

centrifuge.on(‘connect’, function() {
centrifuge.subscribe(‘public:comments’, function(message) {
// message from channel received
});
});

Абсолютно легко и легко, правда? Но допустимо ли сделать еще проще?

В всеобщем случае, вероятно, нет. Конец статьи!

Стоп, стоп, безусловно же нет, давайте посмотрим на частный случай. Если ваше веб-приложение требует довольно трудной логики подписок, публикаций, менеджмента каналов, то скорее каждого вариант, тот, что я опишу ниже, не для вашего сайта. Впрочем, множество веб-приложений не тяготятся выжать максимум реалтаймовых вероятностей — и все что им необходимо — это слушать определенные каналы, которые динамически не меняются, получать события и реагировать на них, в большинстве случаев легко отрисовывая метаморфозы на веб-странице. Это комментарии, счетчики, уведомления, графики и многое другое.

Многие из вас слышали о Knockout, AngularJS. Одно из средств, применяемых этими библиотеками — вынесение изложения логики приложения в html страницы. Задавая признаки и их значения, вы можете легко менять поведение на желаемое. Что если воспользоваться html и в нашем случае?

Посмотрим на подключение к Центрифуге. Необходимо передать адрес, токен, идентификатор пользователя и идентификатор плана. Клиентская часть узнает надобные значения от бэкенда. Имена необходимых каналов для подписки также передает в образец бэкенд. Как известить эти данные джаваскрипту?

Разглядим самые явственные варианты. Дозволено передать эти данные в виде JSON на вход инициализирующей функции. А дозволено отрендерить данные на веб-странице как признаки html-элементов, а после этого из кода обращаться к необходимым элементам, брать значения их свойств и применять. И данный 2-й вариант мне представляется особенно эластичным. Настоль эластичным, что подобны_twomk!#339933″>-value=“{{ centrifuge_user }}”></div>
<div id=“centrifuge-project” data-centrifuge-value=“{{ centrifuge_project }}”></div>
Тут применяется синтаксис django-образцов, данные об адресе, токене, ID юзера и плана предоставляет бэкенд вашего приложения.

3) На странице с комментариями добавляем html-элемент с именем канала:

<div class=“centrifuge” id=“comments-handler” data-centrifuge-channel=“comments” data-centrifuge-namespace=”public”></div>

4) И на этой же страничке c комментариями добавляем javascript:

$(function() {
$(‘#comments-handler’).on(‘centrifuge.message, function(message) {
$(‘body’).append(message.data);
});
});

Всё!

Больше того, сейчас, Дабы добавить новейший реал-тайм элемент на всякую страницу, вам понадобится исполнить только последние 2 пункта.

Вариант не рассматривает допустимых ошибок, в некоторых случаях вам и не понадобится их отлавливать. Но в любом случае плагин предоставляет вероятность повесить добавочные обработчики событий на html-элемент, такие как centrifuge.errorcentrifuge.disconnect, Дабы надлежащим образом среагировать.

Та ли это безупречная простота, о которой говорил Альберт Эйнштейн (его известный афоризм в основе заголовка данной статьи) — покажет время.

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

Центрифуга доросла до версии 0.3.1.

Сейчас для PUB/SUB механизма дозволено применять Redis взамен ZeroMQ. А в случае если вам довольно одного инстанса Центрифуги, то дозволено обойтись вообще без них.

Дозволено установить Центрифугу без непотребных вам зависимостей, применяя флаги setup.py: --without-zmq--without-redis--without-postgresql--without-mongodb

Переделан веб-интерфейс, он сейчас отлично выглядит на мобильных устройствах и, на мой взор, стал значительно привлекательней.

Из раздела “менеджмент проекта” дозволено публиковать JSON в каналы (для этого применяется Ace editor), a также запрашивать presence, history данные канала и отписывать пользователя по ID.

Возникло API для конструкции планов и пространств имен — безусловно все действия сейчас дозволено исполнять не применяя веб-интерфейс.

На этом пока всё, до новых встреч, друзья!

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB