Этот плагин задуман как базовый для многих кастомных приложений под Erlyvideo. И он реализует возможности, которые необходимы практически в любом таком приложении.
А именно:
В принципе этих возможностей уже достаточно, чтобы строить довольно сложные многопользовательские риалтайм приложения. Но в серьезном проекте наверняка будут еще и другие модули, с более специфичной для данного проекта логикой.
Исходные коды проекта находятся здесь. На момент написания статьи актуальна версия 1.3, и данный плагин уже активно используется в реальных проектах.
Проект представляет собой OTP приложение
Сердце модуля, все самое важное и интересное сосредоточено здесь:
erlypresence_server.erl :) Практически весь вышеописанный функционал сосредоточен здесь.
Установка немного отличается для машины разработчика и для продакшн сервера.
На машине разработчика удобнее иметь сорцы проекта erlyvideo и сорцы проекта erlypresence в одном каталоге. Например так:
~/projects/erlyvideo ~/projects/erlypresence
Затем нужно кое-чего дописать в erlyvideo.conf:
{modules, [erlypresence]}.
...
{rtmp_handlers, [..., erlypresence_server]},
И все erlyvideo знает, где найти erlypresence и erlypresence_server.
На продакшн сервере изменения в erlypresence.conf нужны такие же. А сам модуль нужно положить так:
path/to/erlyvideo/plugins/erlypresence/ebin/*
В общем-то там нужна только папка ebin.
Либо erlypresence можно положить в одну из папок, указанных в erlyvideo.conf в коржете {path, ...}
Немного остановимся на том, как erlypresence авторизует пользователей. Клиентское приложение присылает некий параметр uid (это может быть id сессии, или какие-нибудь захешированные данные), либо логин-пароль.
erlypresence посылает эти данные GET-запросом по HTTP на некий веб-хендлер, указанный в ebin/erlypresence.app. Хендлер возвращает XML данные, либо содержащие информацию о пользователе, либо сообщение об ошибке авторизации.
Из этой информации erlypresence запоминает user id, который ему нужен, чтобы передавать сообщения данному пользователю. А остальные свойства он сразу пихает в AMF объект и отдает их клиентам в таком виде. Клиенты же получают нетипизированый Object, свойства и значения в котором соответствуют XML узлам в ответе веб-хендлера.
В проекте есть еще тестовый клиент -- флекс приложение, которое взаимодействует с erlypresence, запрашивает и показывает список пользователей, обновляет его, пересылает данные между клиентами.
Никакого полезного приложения он из себя не представляет, но служит примером того, как нужно использовать erlypresence в реальном проекте.
Comments
Макс Лапшин (not verified)
Mon, 06/06/2011 - 08:15
Permalink
Есть маленькая поправка. Если
Есть маленькая поправка. Если ты делаешь честный пакет из erlyvideo и ставишь его, как надо в /opt/erlyvideo, то можно просто положить в /opt/erlyvideo/plugins и в path прописывать не надо.
Второе: не стоит rtmp_handler называть как erlypresence_server, это путает. Лучше сделай отдельный модуль чисто под rtmp, потому что сама функциональность presensce никак с RTMP не связана.
yzh44yzh
Mon, 06/06/2011 - 11:38
Permalink
Подумал об этом
Подумал об rtmp хендлерах, но пока решил оставить, как есть :) Пока мне кажется более удобным иметь их прямо в gen_server модуле.
Но я потом еще раз об этом подумаю :) Возможно потом будет использоваться что-то еще, кроме RTMP.
GrIvA (not verified)
Thu, 06/09/2011 - 12:23
Permalink
Test-client для erlypresence
Очень интересно и познавательно.
Это прекрасная база, чтобы наращивать свой функционал erlyvideo.
Есть одна проблемка....- не собирается клиент..(((
Можно выложить куда-нить уже собранный клиент?
Заранее СПАСИБО!!
yzh44yzh
Thu, 06/09/2011 - 15:14
Permalink
ну если не собирается клиент,
ну если не собирается клиент, то наверняка компилятор выдает какие-то сообщения об ошибках :) И оные сообщения логично прислать мне. Можно через http://yzh44yzh.com/contact
Anonymous (not verified)
Thu, 06/09/2011 - 16:03
Permalink
Нет, клиент не собирается,
Нет, клиент не собирается, потому что на UBUNTU не установлен flex компилятор )).
Хотел обойтись малой кровью. Сегодня вечером скачаю - попробую скомпилировать.
Спасибо.
yzh44yzh
Thu, 06/09/2011 - 16:45
Permalink
там есть Makefile для тест
там есть Makefile для тест клиента https://github.com/yzh44yzh/erly-presence/blob/master/test-client/src/Ma...
только в нем зашит путь к flex sdk. Скачаешь flex sdk, поменяешь путь к нему в Makefile, и тогда обычный make должен собрать клиента, а make run запустит его в браузере
yzh44yzh
Thu, 06/09/2011 - 16:43
Permalink
ну так бы сразу и сказал, а
ну так бы сразу и сказал, а то "не собирается" )
Trskldn (not verified)
Sun, 07/31/2011 - 05:43
Permalink
Спасибо.
Большое спасибо за плагины!!
Возможно небольшая опечатка, у меня код заработал только когда поменял {rtmp_handlers, [..., erlypresence_server]}, на {rtmp_handlers, [..., erlypresence_rtmp_handler]},.
yzh44yzh
Mon, 08/01/2011 - 16:41
Permalink
это не опечатка, просто со
это не опечатка, просто со времени написания статьи код плагина изменился )
Add new comment