Эта страница была перенесена на
altlinux.org. Текст на freesource.info заморожен.
Бакенд
Существует два вида бакендов: нативные и внешние. Размещаются эти бакенды в каталогах
/usr/lib/alterator/backend2 и
/usr/lib/alterator/backend3 соответственно.
Нативные бакенды пишутся только на языке scheme и работают внутри процесса alterator. Написание нативных бакендов требует достаточно большого опыта программирования и большой аккуратности.
Внешний бакенд может быть написан на произвольном языке програмирования, при этом
настоятельно рекомендуется использовать готовые библиотеки, предоставляющие API для взаимодействия с alterator. Все библиотеки построены по одному и тому же принципу – есть главный цикл взаимодействующий с alterator и есть функция-обработчик пришедших сообщений.
В функции обработчике:
- анализируется вид запроса (параметр action)
- анализируется url запроса, а также значения входных параметров
- вычисляются и выводятся значения выходных параметров.
Простейший бакенд на shell
Пример простейшего бакенда на shell:
В данном примере:
message_loop — запуск цикла обработки событий,
on_message — обработчик входящих сообщний. Входные переменные выглядят как переменные
$in_<имя>. Выходные печатаются при помощи функций write_* .
alterator_api_version – текущая версия API для взаимодействия с alterator. Если к к бакенду <name> обращались из интерфейса по адресу
/<name>/foo/bar, то переменная
$in__objects будет равна «foo/bar» (то есть «хвост» адреса), если обращались по адресу
/<name>, то
$in__objects будет равна «/».
Простейший бакенд на perl
Пример аналогичного бакенда на perl (см. также
здесь):
Здесь, как ив shell-бакенде
message_loop — запуск цикла обработки событий,
on_message — обработчик входящих сообщний. Обработчику передается ссылка на хэш с входными перемеными. Выходные печатаются при помощи функций write_*. При обращении из интерфейса по адресу
/<name>/foo/bar, то в бакенде <name> в этом хэше будет присутствовать
_objects="foo/bar" (то есть «хвост» адреса), если обращались по адресу
/<name>, то
_objects="/".