Серверный Flash

5 Апр
2012

Да-да, я помню. Посетители Блога большей частью любят оптимизацию серверов, стартапы, Ruby, HTML5, юникс, Crome и считают Flash умирающей платформой. А я пользователь Windows, люблю Firefox, обожаю ActionScript и пользуюсь им всего — генерации сложных SQL-запросов, обработки текстов и создания плагинов к Фотошопу. Если бы на нем можно было писать серверную часть сайтов – я бы это делал, в моем Eclipse разве что такого плагина не хватает.
Впрочем — почему нет?

Немного погуглив, я нашел на гитхабе проект mod_actionscript – модуль для Apache. Вероятно, это было как раз то, что надо, но сборки имелись только под *nix. Дальнейший поиск привел к родственному проекту Redtamarin. Это фактически тот самый флеш, только консольный. Подходит.

Для начала скачиваем и собираем пакет инструментов «redtamarin tools». После сборки получаем утилитку «EclipseExternalTools.exe», переносим ее в workspace Эклипса и запускаем, в результате получаем настроенный набор external tools для компиляции, отладки и запуска консольных ActionScript3 приложений.

Теперь создаем новый проект ActionScript. Не мудрствуя лукаво, я назвал его «redtamrin». Отрезаем Flex Framework – никчему он на сервере. Из проекта «redtamarin tools» забираем несколько *.swc и подключаем их к проекту, чтобы получить автокомплит для классов, обеспечивающих работу с API операционной системы – чтение/запись файлов, сеть и т.п.

Поскольку я хочу не создавать десктопные приложения, а запустить AS3 на сервере, мне понадобится всего лишь правильный текст на выходе. Например, вот таким образом:
package
{
public class redtamarin
{
public function redtamarin ()
{
var output:XML=<html/>;
output.appendChild(<head/>);
output.appendChild(<body/>);
output.body[0].appendChild(

test title

);
output.body[0].appendChild(test paragraph);
trace(output.toXMLString());
}
}
}
var html:*=new redtamarin();

После компиляции получится крохотный бинарный файл «redtamarin.abc», который я перенес в корневую папку локального сайта. Расширение означает «ActionscriptByteCode». Если запустить его в консоли с помощью собранного ранее интерпретатора из «redtamarin-tools», мы получим текст созданной нашей программой web-странички.
Итак, серверный скрипт на нужном языке у нас есть. Теперь надо научить Apache распознавать его и отдавать браузеру.

Среди богатого набора модулей самого известного web-сервера есть «filter_module». Открываем конфиг «httpd.conf» нашего Денвера-Wamp-другой сборки и раскомментируем строку:

LoadModule ext_filter_module modules/mod_ext_filter.so


Это позволит нам пользоваться возможностями модуля фильтрации, который поможет обрабатывать нестандартные скрипты. Там же, в «httpd.conf», прописывам действия, которые должен выполнить сервер при обращении к скрипту *.abc. К сожалению, интерпретатор redshell.exe любит, когда ему скармливают файлы, а Апач любит отдавать поток в stdin. Поэтому пришлось пропустить исполнение через небольшую прослойку. Самым быстрым вариантом оказалось написать стандартный BAT-файл. Значит, добавляем в конфигурацию сервера строки:

ExtFilterDefine abc-to-html mode=output intype=text/abc outtype=text/html cmd="… путь к директории на сервере … bin/processabc.bat"
SetOutputFilter abc-to-html
AddType text/abc .abc


Эти инструкции в конфигурации сервера указывают подключенному модулю фильтрации, что при обращении к скрипту надо его перед выдачей пропустить через некий исполняемый файл, в данном случае BAT-сценарий. Но вот беда, батники тоже плохо ладят с входным потоком. Зато в них доступны переменные окружения, в которых сервер щедро разложил много нужных данных. Вот что выдаст команда SET в этом сценарии:

GATEWAY_INTERFACE=CGI/1.1
PROMPT=$P$G
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=GET
… тут еще много всего интересного …
SERVER_ADMIN=…моя почта…@mail.ru
SCRIPT_FILENAME=… путь на сервере …/www/redtamarin.abc
REMOTE_PORT=47938
DOCUMENT_URI=/redtamarin.abc
DOCUMENT_PATH_INFO=


Аллилуйя. Теперь мы можем отдать интерпретатору файл (и аргументы, если понадобится).
Пишем в нашем «processabc.bat» следующее:

@echo off
… путь на сервере … bin/redshell.exe %SCRIPT_FILENAME%


Первой строкой отключаем лишний вывод, второй – отправляем на исполнение скомпилированный ранее файл скрипта, адрес которого в файловой системе мы получили из переменных окружения. Спонсор переменных окружения — Apache/2.2.21 (Win32). Поток, отправленный в stdin, не пригодился. Боже, какая жалость.
Открываем в браузере адрес http://… наш_сервер …/redtamarin.abc и видим простейшую HTML-страницу, которую мы запрограммировали на ActionScript. Нажатие Ctrl-U показывает следующее:

 <head/>

test title


test paragraph




Как тут принято в конце говорить? Profit?
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх