Red5, реальность
N дней назад имел удовольствие поближе познакомиться с Red5. Вообще мы давно с ним работаем, но не я лично. Все время я писал код под FMS, оставляя другому человеку удовольствие портировать этот код под Red5 и Wowza (все наши приложения прозрачно работают на любом из этих трех медиа-серверов).
Но вот однажды, благодаря моей лености и недальновидности, возникли трудности с этим портированием: оно нужно было очень срочно, а шло медленно. Так что я был вынужден принять в этом участие и хоть как-то помочь. Дело осложнялось тем, что у меня были весьма поверхностные знания о Red5, и я вообще не программирую на Java.
Но вот начал втыкать в документацию Red5. Раздел Migration Guide, описывающий переход с FMS на Red5, порадовал. У Red5 есть интересные фишки и преимущества перед FMS. А именно:
- Есть нормальная работа с любой базой данных. Этого нет на FMS;
- Есть взаимодействие с окружением ОС, вызов внешних команд. Этого нет на FMS;
- Богаче API для работы с Server Side SharedObject, в частности, можно перехватывать доступ с клиента к SharedObject и переопределять поведение. FMS не умеет контролировать такой доступ;
- ISchedulingService, ISchedulingJob выглядят по-серьезнее, чем setInterval;
- Есть AMF Remoting. То есть, с Red5 можно работать не только по RTMP, но и через этот remoting, как с BlazeDS;
К счастью, есть возможность создавать хендлеры для клиента динамически в рантайме (для разных клиентов разные хендлеры, в зависимости от прав юзера: guest, regular, moderator, admin). Этот прием я начал активно юзать на FMS, и хотелось бы сохранить его на Red5.
Но дальше с документацией по Red5 все печально. Она больше ориентирована на разработчиков, Red5 же и разрабатывающих, чем на пользователей. Там даже толком не описано, как его установить и запустить.
By the way, я сделал это так:
mkdir -p /opt/red5 cd /opt/red5 svn checkout http://red5.googlecode.com/svn/java/server/trunk/ make
То есть, он собирается из сорцов. Бинарный пакет, скачаный с http://www.red5.org/wiki/Releases, мне не удалось заставить работать.
Red5 собирается в папку /opt/red5/dist, где и нужно его запускать:
cd /opt/red5/dist ./red5.sh
Но про папку dist еще нужно догадаться, ибо в /opt/red5 тоже есть red5.sh, который запускается, но нифига не работает.
В общем, это как у меня получилось его установить и запустить. Ибо существуют стопицот разных способов это сделать, правда ни один не гарантирует, что у вас это получится :)
Сильно много помощи в портировании я оказать не смог, ибо оказалось (как ни странно), что я не смогу за 2-3 дня освоить Red5 и Java достаточно, чтобы эффективно работать. Так, написал кое-какой код, убедился, что он под Red5 работает, а потом переключился на архитектурный уровень. Писать код оставил другим.
В итоге убедился, что преимущества FMS -- низкий порог входа и легкий старт, к Red5 не относятся. Тем не менее, мне все равно нужно его осваивать, так что буду работать в этом направлении. Я слишком долго это откладывал.
Red5, мечты
В документации Red5 есть одна такая интересная вещь, как Scripting Implementations. Оказывается под него можно писать приложения на скриптовых языках: JavaScript, JRuby, Jython, Groovy, Beanshell. И это для нас очень интересно.
В идеале хорошо бы написать код на JavaScript, единый для FMS, Red5 и Wowza, который везде будет работать одинаково. Это решает проблемы портирования. В реальности такое маловероятно. Более вероятно, что будет 70-80% общего кода на JavaScript, + 30-20% специфичного кода под каждый сервер. Но и это очень хорошо. Гораздо лучше, чем писать код под FMS, а потом портировать его под Red5 и Wowza, как мы сейчас делаем.
Правда меня сильно смущает производительность. Red5 и с нативным Java-кодом значительно уступает FMS по производительности. Как же он будет работать с кодом на JavaScript?
Есть еще надежда на Groovy. Как известно, этот язык можно скомпилировать в Java-байткод, что решит проблему производительности. Вероятно будет не так сложно написать транслятор Groovy -> ServerSide ActionScript. Тем более, что достаточно транслировать не весь синтаксис Groovy, а только его подмножество, достаточное для логики FMS приложений.
В своих мечтах я пишу серверный код на Groovy, и он компилируется для Red5 и Wowza и транслируется для FMS, и везде работает одинаково :)
Ах да, еще команда Red5 работает над тем, чтобы серверные приложения можно было писать на ActionScript 3. Ну поглядим :)
FMS, реальность
Ну а с FMS у меня все хорошо :) Наработан код, наработаны архитектурные подходы и фишки. Вырисовывается некий фреймворк. Причем растет он сугубо из практических нужд, а не из красивых абстракций. И поэтому он не особо красив, но зато решает практические задачи.
Часть этого фреймовка -- система юнит-тестов. Она тоже не такая красивая, как FlexUnit4, но решает мои задачи, и даже поддерживает асинхронные тесты.
В каких-то моментах писать тесты обременительно, а в каких-то других гораздо обременительнее обходится без них. Я не дошел до такого фанатизма, чтобы покрывать тестами 100% кода (и не дойду, я практик, а не фанатик), но где-то 40-60% считаю удобным покрывать.
FMS, мечты
Разумеется, я горю желанием поделиться этими наработками с общественностью :) Но глядя на Red5, понимаю, что выкладывать это дело в том виде, в каком оно сейчас есть, нельзя. Нет никакой документации, никаких демок и примеров. Никто просто не поймет, как этим пользоваться. И порог входа больше похож на стену :)
Стало быть, нужен демо-проект, который можно скачать, запустить, и поглядеть, как там все работает. Нужна документация о том, как это скачать, запустить, и как это работает :) Разумеется, в проекте должен быть не только сервер, но и клиент.
Нужно ли говорить, что у меня нет времени этим заниматься? Нужно ли говорить, что время появится, если у меня будет горячее желание? (ибо я ж вот нашел время, чтобы написать этот пост в блоге).
Желание появится, если кто-нибудь скажет, что ему будет интересно это посмотреть и попробовать. Так что, интересно?

Recent comments
1 week 2 days ago
1 week 5 days ago
2 weeks 2 days ago
3 weeks 3 days ago
4 weeks 6 days ago
4 weeks 6 days ago
4 weeks 6 days ago
4 weeks 6 days ago
5 weeks 3 days ago
5 weeks 6 days ago