вторник, июня 10, 2008

SHTTPD: веб-сервер на флешке, йессс!

Потребовалось сделать нечто красивое, живое, вжжжиууу... Что-то вроде презентации. Но, разбирая задачу, решил делать это как веб-приложение, движимое Яваскриптом. Не суть. Для оживления просто набросал туда релевантного FLV-видео с использованием сказочно удобного FlowPlayer. Отладил на интранетовском Апаче, красота.

Однако работать это приложение должно локально, с сувенирных флешек. Упс. Для воспроизведения локального Flash требуется залезть в настройку flash-плагина и кой-что подправить. Просить каждого пользователя это сделать? Исключено. Остаётся гонять приложение через портативный веб-сервер, идущий с той же флешкой.

Начал с удобного и красивого. Server2Go. Класс. Но Виста поддерживается только в девелоперской версии, которая доступна платно. В топку.

XAMPP. Самый подходящий эпитет - overkill. PHP, MySQL, куча всякого. Вроде бы работает, но самоконфигурация протекает ну оооочень медленно, неприемлемо. Конечно, всю эту ораву конфигурни попробуй за пару секунд. Всё тяжелое, муторное. В топку.

В отчаянии стал шерстить по порядку сводную таблицу лёгких http-серверов на Википедии. Потыкавшись, набрёл на SHTTPD Сергея Любки ("Люююбк! А, Люююбк!"). Вот Оно. Один маленький exe-шник, вся конфигурация — из командной строки. Решил все вопросы. Не сразу, но после некоторого твикинга — решил.

Потребовалась также freeware программа для запуска в качестве autorun, чтобы одной рукой она запускала сервер, а другой — браузер с приложением. Такая есть: AutoRun от Tarma Software.


Из этих двух вещей всё чудно собралось. Во-первых, написался файл autorun.inf со следующим содержимым (перенос длинной строки убрать):

[autorun]
open=autorun.exe

[autorun.tarma]
run1=shttpd.exe -root content -acl -0.0.0.0/0,+127.0.0.0/8 -ports 9090 -mime_types flv=video/x-flv -threads 20
run2=start.html

В корне флешки, кроме autorun.inf и autorun.exe. лежит собственно сервер shttpd.exe. Запускается со следующими настройками:
-root content : wwwroot - папка content.
-acl -0.0.0.0/0,+127.0.0.0/8 : всех клиентов нафик, кроме локалхоста.
-ports 9090 : вряд ли кто-то слушает на порту 9090 у клиента?
-mime_types flv=video/x-flv : это из-за чего сыр-бор: привязать првильный тип к расширению flv.
-threads 20 : это важно. По умолчанию сервер задействует один (1) поток. Если клиент не стал досматривать свой мультик и пошёл дальше, он застолбил сервер и попал на долгое ожидание (очевидно, пока идёт TIME_WAIT). Потоков побольше — ожиданий поменьше.

Параметр run2 в autorun.inf запускает браузер по умолчанию и открывает из корня флешки страницу start.html. Почему не сразу контент? Потому что в высшей степени вероятно, что браузер стартует раньше сервера, и выйдет конфуз. Поэтому мы покажем вводную страничку "Обожжите чуток..." с рефрешем секунд через 15. И указанием нажать F5 в случае, если страница не будет открыта.

Такая флешка нормально работает в XP/Vista. В Висте, правда, в зависимости от настроек либо просит нажать единственную кнопку ОК, либо кнопку "Разблокировать". В любом случае решение очевидно. Ну что поделать, запуск левого сетевого сервера — действительно большой ууупс в плане безопасности.

При всех своих минусах эта схема гораздо предпочтительнее более комфортного, но грузного, грустного и постылого PowerPoint. Всё-таки веб-приложение намного интереснее и гибче. И потом, это обычные веб-страницы, не какой-то мрачный и закрытый формат. Положишь их на сайт — будут веб-контентом. Отдашь на флешке — будут презентацией. Как говорил великий Зепп Бранниган, разве не об этом мечтал человек с тех пор, как впервые посмотрел на звёзды?

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

Поиск по этому блогу