- PVSM.RU - https://www.pvsm.ru -
Это продолжение серии публикация о проекте Interplay Mеdium (первая статья здесь [1]). В этой статье я расскажу о том, как устроено «сердце» Interplay Meduim кластера — микро-сервер AXOD.
Пара слов касательно этимологии: в wiki и на сайте проекта кое-где все еще фигурирует старое название — AXON. Так я и планировал назвать микро-сервер сперва. Однако позднее, размышляя над графическим решением интерфейса, я пришел к идее о четырех базовых фигурах, которые, кроме всего прочего, просились расположиться именно так, чтобы образовать собою название (с буквой N я, после некоторых сомнений, тогда решил примириться). С одной стороны название — суть, отсыл к Маклюэну (и ранее к Хайдеггеру) с их интерпретациями роли технологий и языка (см ссылку в предыдущей статье). С другой — референция к античным представлениям о базовых элементах. Кроме этого, в процессе этимологического исследования я натолкнулся на древнеегипетские источники, содержащие интерпретации фигур, как нельзя кстати рифмующиеся с задуманным мною разделением на «органы чувств». Таким образом, получившееся воплощение, как это порой случается, оказалось сильнее изначальной интенции. В итоге, буква N приобрела новое для нее амплуа и стала буквой D, как намек на электронно-цифровую сущность все затеи :)
AXOD представляет из себя набор кастомизированных скриптов, предназначенных для контроля логики периферийных устройств (отдельных объектов или являющихся морфологической частью общего с микро-сервером объекта), именуемых «Дендриты» (Dendrites) + модульный веб интерфейс. В качестве препроцессора используется язык LUA. О последнем стоит сказать пару слов отдельно. LUA был изначально придуман, как интерпретируемый язык для описания логики в компьютерных играх, однако последнее время завоевал популярность у разработчиков встраиваемых систем, как удобное, нетребовательное к ресурсам и весьма проворное решение. В частности популярный дистрибутив для рутеоров OpenWRT вот уже несколько лет использует LUA в качестве HTTP препроцессора. Это, в свою очередь, также стало аргументом в пользу такого выбора.
Как я уже ранее написал, AXOD имеет два набора интерфейсов. Один, именуемый «Дендриты» — для периферийных устройств (т.е. по сути — это физические интерфейсы. За работой дендритов следят скрипты, являющийся частью синаптических модулей). Другой набор — это интерфейсы направленные во вне — «Синапсы». Т.е. пользовательские графические интерфейсы и API для соседних AXOD-ов (или любых внешних элементов кластера).
Каждый Синапс (или синаптический модуль) расположен в своей собственной директории
{axod micro-server home directory}/synapses/{synaptic group}/{name of synapse}
и содержит следующие обязательные компоненты
Важное замечание: поскольку микро-сервер предназначен для работы на слабых устройствах, все, что связано с парсингом и какой бы то ни было ресурсоемкой обработкой сведено к минимуму. Поэтому, в случае любых изменений (к примеру, при переключении состояния кнопок) два последних файла (bottominterface.tmpl и maininterface.tmpl) должны генерироваться непосредственно синаптическим скриптом. Основной движок «подхватывает» эти файлы при формировании HTTP ответа клиенту.
так выглядит «основная страничка» предлагаемого по-умолчанию интерфейса микро-сервера AXOD
это интерфейс синаптического модуля сделанного для управления игрой Тетрис :)
а это в разы более сложный интерфейс «музыкального плейера» (показано, как осуществляется выбор внутри одной синаптической группы с помощью нижнего меню)
1. Структура синаптических модулей имеет древовидную форму. Каждый синапс содержит собственный микро-движок (/synapse.lua) — это сердце синаптического модуля. Формально основной (корневой) модуль является таким же синаптическим модулем, что и все остальные. Поэтому устроен он по сходному принципу и имеет те же описанные выше компоненты со сходной файловой структурой относительно собственного микро-движка synapse.lua.
Открытый пользователем синапс сперва подгружает темплейт интерфейса (synapse.tmpl), который в свою очередь использует свой CSS (расположенный в директории css/) и запускает пользовательский JS (js/). CSS и JS основного синаптического модуля, расположенного в корне микро-сервера имеют стандартные общие для всех синаптических модулей стили и скрипты.
2. Отличие корневого синапса от всех вложенных — отсутствие нижнего интерфейса и соседних синапсов. Однако, если морфология вашего приложения подразумевает такое решение — вы можете легко дополнить «главную страницу» необходимым модулем по-аналогии.
Нажатие на один из символов на первой странице откроет интерфейс принадлежащий выбранной вами синаптической групе (/synapses/{synaptic group} subdirectory). По умолчанию открывается первый по списку синапс (согласно тому, что первым возвращает команда ls (/synapse.lua строка 26), вы можете задать собственные условия))
3. Как я уже написал выше, каждый синапс содержит собственные .tmpl файлы (верхний и нижний) и сходную файловую структуру. Микро-движок формирует пользовательский XML простым включением этих фалов. Поскольку интерфейс многопользовательский, микро-движок должен формировать новый .tmpl каждый раз, когда происходят какие-либо изменения.
4. Каждый синапс имеет четыре обязательных опции
Внимание! вы можете запускать /synapse.lua в командной строке (с соответствующими опциями) и таким образом отлаживать ваш микро-движок непосредственно в терминале. Поскольку существует известное затруднение с обработкой ошибок при формировании XML c использованием LUA, «консольное» решение чрезвычайно удобно для отладки синаптического модуля.
Кроме этого, ваш синаптический модуль может иметь любые другие опции, какие требует морфология вашего проекта.
5. Когда вы активируете какую-либо функцию вашего пользовательского интерфейса (или внешний объект или приложение выполняет HTTP запрос), synapse.lua выполняется с соответствующими параметрами.
6. Пользовательское управление может быть осуществлено как посредством AJAX запросов, так и прямым вызовом соответствующим образом сформированных ссылок, содержащих необходимые параметры (настоящей версии поддерживается пока только метод GET).
7. Кроме этого, JavaScript запущенный на стороне клиента периодически опрашивает микро-сервер на предмет изменений интерфейса. Если таковые произошли, то меняет соответствующие элементы. Пользователь может использовать синаптический интерфейс даже в том случае, если его браузер не поддерживает JS, однако, в этом случае, он не сможет видеть «отклик» или изменения сделанные другими пользователями.
8. Все интерфейсы должны работать без использования JavaScript, чтобы сохранить максимальную универсальность. Это часть Кодекса [2] проекта Interplay Medium, принципов которого я собираюсь придерживаться в дальнейшем.
Собственно пока все. В следующей статье, я на конкретном примере покажу, как собрать и запустить собственный синаптический модуль.
Демонстрация работы первого прототипа системы.
В настоящей версии использован фреймворк написанный Ником Гэмоном (Nick Gammon) для реализации HTTP препроцессинга на языке LUA, за что ему отдельное спасибо :)
Автор: aureliano_b
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/14254
Ссылки в тексте:
[1] здесь: http://habrahabr.ru/post/149099/
[2] Кодекса: http://wiki.interplaymedium.org/index.php/InterplayMedium/SynapsesHowTo
[3] репозиторий проекта: http://gitorious.org/interplay-medium
[4] Оригинальная статья: http://wiki.interplaymedium.org/index.php/InterplayMedium/AxonArchitecture
[5] Ссылка на ветку форума: http://www.gammon.com.au/forum/?id=6498
Нажмите здесь для печати.