Редактирование: Alterator/module/backend

Перейти к навигации Перейти к поиску

Внимание: Вы работаете как анонимный пользователь. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
<onlyinclude>
[[Category:Sisyphus]]
=== Бэкенд ===
Существует два вида бэкендов: нативные и внешние. Размещаются эти бэкенды в каталогах ''/usr/lib/alterator/backend2'' и ''/usr/lib/alterator/backend3'' соответственно.


Нативные бэкенды пишутся только на языке scheme и работают внутри процесса alterator. Написание нативных бэкендов требует достаточно большого опыта программирования и большой аккуратности.
=== Бакенд ===
Существует два вида бакендов: нативные и внешние. Размещаются эти бакенды в каталогах ''/usr/lib/alterator/backend2'' и ''/usr/lib/alterator/backend3'' соответственно.


Внешний бэкенд может быть написан на произвольном языке программирования, при этом '''настоятельно рекомендуется''' использовать готовые библиотеки, предоставляющие API для взаимодействия с alterator. Все библиотеки построены по одному и тому же принципу - есть главный цикл взаимодействующий с alterator и есть функция-обработчик пришедших сообщений.  
Нативные бакенды пишутся только на языке scheme и работают внутри процесса alterator. Написание нативных бакендов требует достаточно большого опыта программирования и большой аккуратности.
 
Внешний бакенд может быть написан на произвольном языке програмирования, при этом '''настоятельно рекомендуется''' использовать готовые библиотеки, предоставляющие API для взаимодействия с alterator. Все библиотеки построены по одному и тому же принципу - есть главный цикл взаимодействующий с alterator и есть функция-обработчик пришедших сообщений.  
В функции обработчике:
В функции обработчике:
* анализируется вид запроса (параметр action)
* анализируется вид запроса (параметр action)
Строка 11: Строка 12:
* вычисляются и выводятся значения выходных параметров.
* вычисляются и выводятся значения выходных параметров.


==== Простейший бэкенд на shell ====
==== Простейший бакенд на shell ====


Пример простейшего бэкенда на shell:
Пример простейшего бакенда на shell:
<source lang="bash">
<pre>#!/bin/sh -f
#!/bin/sh -f


po_domain="alterator-foo"
po_domain="alterator-foo"
Строка 42: Строка 42:
}
}


message_loop
message_loop</pre>
</source>
 
В данном примере:  
В данном примере:  
*'''message_loop''' запуск цикла обработки событий
*'''message_loop''' -- запуск цикла обработки событий
*'''on_message''' обработчик входящих сообщний. Входные переменные выглядят как переменные ''$in_<имя>''. Выходные печатаются при помощи функций ''write_*'' .
*'''on_message''' -- обработчик входящих сообщний. Входные переменные выглядят как переменные ''$in_<имя>''. Выходные печатаются при помощи функций ''write_*'' .
*'''alterator_api_version''' текущая версия API для взаимодействия с alterator.
*'''alterator_api_version''' - текущая версия API для взаимодействия с alterator.


Если к к бэкенду &lt;name&gt; обращались из интерфейса по адресу ''/&lt;name&gt;/foo/bar'', то переменная ''$in__objects'' будет равна "foo/bar" (то есть "хвост" адреса), если обращались по адресу ''/&lt;name&gt;'', то ''$in__objects'' будет равна "/".
Если к к бакенду &lt;name&gt; обращались из интерфейса по адресу ''/&lt;name&gt;/foo/bar'', то переменная ''$in__objects'' будет равна "foo/bar" (то есть "хвост" адреса), если обращались по адресу ''/&lt;name&gt;'', то ''$in__objects'' будет равна "/".


Более подробная информация по написанию бэкендов на shell находится [[Alterator/shell|здесь]].
Более подробная информация по написанию бакендов на shell находится [[Alterator/shell|здесь]].


==== Простейший бэкенд на perl ====
==== Простейший бакенд на perl ====


Пример аналогичного бэкенда на perl:
Пример аналогичного бакенда на perl:
<source lang="perl">
<pre>#!/usr/bin/perl -w
#!/usr/bin/perl -w
use strict;
use strict;
use Alterator::Backend3;
use Alterator::Backend3;
Строка 81: Строка 78:
}
}


message_loop(\&on_message);
message_loop(\&on_message);</pre>
</source>
 
Здесь, как и в shell-бэкенде:
*'''message_loop''' — запуск цикла обработки событий
*'''on_message''' — обработчик входящих сообщений.
 
Обработчику передаётся ссылка на хэш с входными переменными. Выходные печатаются при помощи функций ''write_*'' . 


При обращении из интерфейса по адресу ''/&lt;name&gt;/foo/bar'', то в бэкенде &lt;name&gt; в этом хэше будет присутствовать //_objects// равный "foo/bar" (то есть "хвост" адреса), если обращались по адресу ''/&lt;name&gt;'', то //_objects// равно "/".
Здесь, как ив shell-бакенде:
*'''message_loop''' -- запуск цикла обработки событий
*'''on_message''' -- обработчик входящих сообщений.


Более подробная информация по написанию бэкендов на perl находится [[Alterator/perl|здесь]].
Обработчику передается ссылка на хэш с входными перемеными. Выходные печатаются при помощи функций ''write_*'' . 
</onlyinclude>


При обращении из интерфейса по адресу ''/&lt;name&gt;/foo/bar'', то в бакенде &lt;name&gt; в этом хэше будет присутствовать //_objects// равный "foo/bar" (то есть "хвост" адреса), если обращались по адресу ''/&lt;name&gt;'', то //_objects// равно "/".


{{Alterator modules-nav}}
Более подробная информация по написанию бакендов на perl находится [[Alterator/perl|здесь]].
Обратите внимание, что все добавления и изменения текста статьи рассматриваются, как выпущенные на условиях лицензии CC-BY-SA-3.0.

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Вики-разметка
Заголовки: 1-го: == ==, 2-го: === ===, 3-го: ==== ==== уровня.
Быстрая вставка: «» | [[]] [[|]] {{}} {{|}} [[Категория:]] [[altbug:]] <source lang=""></source> <pre></pre> <!-- -->.
Определения: {{man|}} {{lists|}} {{cmd|}} {{path|}} {{prg|}} {{pkg|}} {{term|}} {{span||}} {{altbug|}}
Выделение: ''italics'', '''bold''', <tt>моноширинный</tt>, <code>код</code>.
Списки: * ненумерованный список, ** вложенный список, # нумерованный список, ## вложенный нумерованный список, *# вложенный смешанный список, ;список :определений.
Verbatim: Пробел в начале строки или <pre>Явный тэг</pre>
Ссылки: [http://www.altlinux.ru/ внешние], [[Main Page|внутренние]], [http://altlinux.ru], [[Main Page]]
Шаблоны: {{Crap}} {{D}} {{Policy}} {{DraftPolicy}} {{Merge|}} {{Улучшение}} {{Тимовец|}}