|
Автор/Источник: Антон Борисов» 02.11.2007 13:27, просмотров сегодня: 1, всего: 12342
статья размещена в группе: Хардкор
оценка: 4.286, 14 голосов
По мере растущей "цифровизации" всего и вся, становится необходимым отслеживать состояние большего количества датчиков и умных устройств. Будь то датчики температуры, влажности, видеокамеры, ATM-аппараты и даже GPS-приемники. Теперь представьте, что все эти устройства объединены в единое "цифровое" пространство и подключены к центру обработки информации — допускается думать, что в качестве информационной среды выступают каналы WiFi, привычный многим Ethernet, а также классические RS232/485. В нашем сегодняшнем случае, в качестве центра обработки информации будет выступать web-сервер.
Логичным будет сделать краткий экскурс в историю развития web-технологий, дабы стало понятно, почему мы взялись называть таким важным словом "центр обработки информации" обычного, в общем-то, работягу internet-просторов.
Впервые о протипе протокола CGI (Common Gateway Interface) заговорили в списке рассылки www-talk в 1993 году. Это были Роб МакКул (Rob McCool), Джон Фрэнкс (John Franks), Ари Луотонен (Ari Luotonen), Джордж Филипс (George Phillips) и Тони Сандерс (Tony Sanders). Примечательно, что первый работал в компьютерном центре университета Иллинойс (National Center for Supercomputing Applications — NCSA), в котором, можно сказать, зародились многие сотрудники компании Netscape Communications. Идея CGI заключается в следующем — при поступлении запроса на сервер в виде http://www.deepspace.net/cgi-bin/test.cgi, сервер запускает приложение test.cgi. Это может быть скомпилированное приложение на языке C, интерпретируемое приложение на Perl или обычный скрипт на shell. Этому приложению сервер передает те данные, что поступили от клиента, например, через форму в HTML-файле. Затем приложение обработает эти данные и сформирует ответ в виде HTML-файла. Выведет сформированный html-текст на устройство STDOUT (или устройство вывода, как кому больше нравится), содержимое которого web-сервер и отправит обратно клиенту. Т.е. отправит HTML-файл. Отработав, test.cgi удаляется из памяти. Естественно, что при многочисленных запросах нагрузка на сервер возрастает, а хочется быстрого отклика. Поэтому следующим этапом было создание концепции FastCGI, которая предполагала, что процесс (в нашем случае, test.cgi) не будет удаляться после окончания запроса. А будет работать все время, что запущен сервер и будет обрабатывать по несколько запросов. Т.о., время на запуск и удаление процесса из памяти сокращается. Создание FastCGI было откликом на аналогичную технологию от Netscape (NSAPI). Напомню, это уже середина 90-х годов.
Затем появляется технология ISAPI от Microsoft. Она, правда, предусмотрена для работы с сервером IIS, но в общих деталях напоминает CGI. Отличие заключается в том, что процесс запускается в общей с web-сервером памяти. Поэтому при своей некорректной работе может нарушить работу сервера. Однако, работа в едином пространстве памяти позволяет ускорить работу ввода/вывода.
В середине 1997 появляются рабочие наброски (версия 1.0) JavaServerPages (JSP). Напоминает CGI в плане начала и окончания работы. Но главное преимущество — приложение написано на Java, что дает определенную гарантию безопасности выполняемого кода.
Еще одна технология от Microsoft — ActiveServerPages (ASP) была представлена чуть раньше, нежели JSP — в декабре 1996 года был выпущен IIS 3.0, в котором уже была поддержка ASP. В целом, страницы с использованием ASP, могут полноправно называться динамическими.
И конечно же не стоит забывать про эпоху развития самого языка HTML, а также скрипт-языка JavaScript. Правда, это уже больше относится к клиентской части, нежели серверной.
Нас в большей степени интересует конечно же, те возможности, которые реализуются на серверной стороне. Т.к., в этом случае, у нас есть прямой контакт с периферийными устройствами. От которых мы можем как получать данные, так передавать. Например, это может быть GPS-приемник, с которым КПК связан по COM1-порту на скорости 9600 бод. Инициализация начинается путем посылки браузером клиента текста, например, «InitGPS» для CGI-приложения, которое в свою очередь отсылает код, в формате понятном для GPS-приемника. По уже упомянутому COM1-порту. Получение данных с приемника в обратном порядке, через CGI-приложение. В итоге пользователь в браузере видит необходимые координаты.
Аналогичная схема используется для любого вида транспорта, будь то COM-порт, IrDA-соединение, WiFi- или SDIO-устройство. Поэтому, в общем-то, логично, почему мы назвали web-сервер центром обработки информации. Он мал, как и само КПК-устройство, на котором он выполняется. Сам КПК потребляет энергии несопоставимо меньше, чем настольная ЭВМ, а возможностей по обработке информации практически столько же.
В нашем обзоре мы рассмотрим следующие продукты: GoAhead WebServer, Apache CE, Pocket HPH и vxWeb. Некоторые моменты будут описаны и интересны для профессиональных кругов, поэтому новичкам можно перепрыгивать технические детали.
Web-сервер с интригующим названием GoAhead разработан компанией, с не менее интересным названием Art&Logic. Что, впрочем, в какой-то мере отразилось и на качестве продукта. При ближайшем рассмотрении в глаза бросается разнообразие аппаратных платформ, на которых можно запустить GoAhead:
- eCos
- LINUX
- LynxOS
- QNX
- Novell NetWare
- VxWorks
- IRIX
- HP-UX
- Mac OS X
- Windows 95/98/NT/2000 и выше
- и, конечно же, Windows CE
Потрясающе, не правда ли? Надо отдать должное этой компании, потому что они являются в определенной степени пионерами в области web-технологий для микроустройств. Богатый опыт (с 1991, согласно их проспектам) и работа с такими компаниями как Hewlett-Packard, Motorola, Broadcom, Nortel Networks, Apple Computer настраивает на серьезный лад, по крайней мере меня. Более того, если у вас вдруг обнаружилось желание портировать данный продукт на, скажем, Symbian OS, то проблем тоже не возникнет. Web-сервер распространяется под free-лицензией на сайте http://www.goahead.com. Скачивайте и пробуйте свои силы.
Но вернемся к обзору возможностей. Сервер работает как на отдачу статических страниц, что и ожидается от нормального web-сервера, а также умеет работать с Active Server Pages (приятное дополнение, не находите?) и CGI-скриптами (попробую предположить, что некоторые из вас начинали web-программирование именно с данного направления). Разработчики также представили свое видение на CGI-скриптинг — GoForms (tm). Это выполнение CGI-скриптов в памяти сервера. Что, с одной стороны уменьшает временные затраты на создание дополнительных процессов вне области памяти web-сервера, с другой стороны — позволяет использовать чуть ли не ROM-устройства для хранения как HTML-страниц, так и скриптов. В памяти находится только операционная система и web-сервер. Далее, в GoAhead реализованы механизмы защиты, такие как Secure Sockets Layer (SSL), Digest Access Authentication (DAA) и управление на уровне пользователя (по идентификатору пользователя, идентификатору группы и по ACL-листам). Если с первым и последним пунктом все ясно, то Digest Access Authentication в чем-то похож на обмен по SSH-протоколу.
Добавьте к упомянутым выше характеристикам объем памяти, который нужен серверу для работы — примерно 50-60 Кб. Заинтригованы? Тогда устанавливаем!
На сайте вы сможете найти как исходный код для сервера, так и уже скомпилированные бинарные файлы под платформы Windows CE 2.0 / 3.0. Уверен, что обладатели устройств на основе Windows CE 2.0 также находятся среди наших читателей. Установка сервера заключается в переписывании exe-файла на устройство и его запуск. В сервере прописаны параметры используемого порта и нахождение html-страниц. По умолчанию считается, что будет использоваться порт 80 и /web/home.asp — домашняя страница на устройстве. Сам сервер определяет по расширению, что перед ним — статика или динамика. В последнем случае вам нужно сохранить страницу с расширением .asp. Поменять настройки можно — заходите (или создаете) в ветку реестра «HKEY_LOCAL_MACHINE\Software\GoAhead\WebServer» и меняйте следующие параметры:
Название | Тип | Значение по умолчанию | Назначение |
DocumentRoot | REG_SZ | /web | расположение директории для файлов |
DefaultFile | REG_SZ | default.asp | название индексного файла |
HomePage | REG_SZ | home.asp | домашняя страница |
Password | REG_SZ | (пусто) | пароль для доступа к серверу |
Port | REG_DWORD | 80 | TCP-порт, на котором слушает сервер |
Содержимое для сервера можете скопировать из архива с исходниками. В итоге, перед вами должна получиться следующая интересная картинка, представленная ниже.
Рис.1 — GoAhead выдает статический HTML на браузер настольной машины
Для людей, пришедших в WindowsCE-мир из мира серверов и мейнфреймов наш следующий рассматриваемый продукт, по всей видимости, будет добрым знакомым. Встречайте Apache CE!
Его портировал на CE-платформу Райнер Кухель (Rainer Keuchel) в 2002 году, поэтому не удивляйтесь, почему такая старая версия сервера — 1.3.20. Уверяю, она вполне работоспособна. Работает как на современных WM5/WM6, так и на WM2003 и даже WM2002. Более ранних экспонатов под рукой, к сожалению, не обнаружилось :-)
Установка, как и в случае с GoAhead, заключается в переписывании файлов на устройство. Однако, это еще не все. Чтобы сервер смог стартовать, необходимо еще переписать библиотеку celib.dll. Либо в директорию, где находится apache.exe, либо в директорию \windows.
И, самое главное, правильно заполнить файл конфигурации сервера — httpd.conf. Конфигурация, которая находится в архиве, используется для целей Райнера, поэтому просмотрите внимательно его содержимое. Т.к. настройки указаны для работы с карты внешней памяти. Давайте вкратце рассмотрим основные параметры для Apache:
Название | Значение | Назначение |
ServerRoot | "/apache» | основное дерево сервера |
Port | 80 | номер HTTP-порта |
ServerAdmin | admin@deepspace.net | электронный адрес администратора |
ServerName | pda2000.deepspace.net | подпись, которую сервер будет отдавать клиенту |
DocumentRoot | "/apache/htdocs» | расположение HTML-документов |
ScriptAlias | /cgi-bin/ "/apache/cgi-bin/" | расположение CGI-скриптов |
При правильной настройке ApacheCE должен стартовать на КПК без всяких проблем.
Рис.2 — сервер ApacheCE готов для обработки запросов от клиентов
Если же Apache по каким-то причинам падает, то верный путь узнать о причинах столь странного поведения заглянув в файлы \apache-stderr.txt, \apache-debug.txt. Причина может достаточно банальна — забыли поменять какой-либо параметр в конфигурации, либо забыли про библиотеку celib.dll.
Однако, наша главная цель — добиться интерактивности. Спешу обрадовать — к вашим услугам 2 способа обработки CGI-запросов — CGI(OLD) и CGI(NEW). Первая схема является классической. При запросе на исполнение CGI-скрипта создаются файлы \cgi-env.txt, \cgi-in.txt. В первом хранится информация о поступившем запросе, в частности, переменные REMOTE_HOST, REMOTE_AGENT. Во втором файле хранятся данные, полученные от формы POST, с HTML-страницы. Задача CGI-скрипта правильно обработать данные файлы и выполнить необходимую задачу. При этом, вывод от скрипта будет направлен в файл \cgi-out.txt. Понятно, что при таком подходе может обрабатывается только один запрос. Поступила команда на исполнение, CGI-скрипт выполнился, и можно обрабатывать следующий запрос. Если скрипт по каким-либо причинам завис, то дальнейший его запуск будет невозможен.
По второй схеме — CGI(NEW) — скрипты должны создаваться на несколько иной основе, когда используются pipes. Т.е. содержимое о переменных передается непосредственно скрипту. Хотя файл \cgi-env.txt и в этом случае будет также создаваться сервером. Следует учесть, что при такой схеме CGI-скрипты нужно будет проектировать с использованием библиотеки celib.
В качестве интересного примера запуска CGI-скрипта найдите какое-либо GUI-приложение и поместите его в директорию \apache\cgi-bin, например, под названием Smartee.exe.
Теперь, введите в окне настольного браузера адресную строку http://10.0.0.200/cgi-bin/Smartee.exe. Посмотрите на ваш КПК — запустилось приложение Smartee.exe. При этом , второй раз запустить его не удастся, пока мы его сами на КПК не завершим. Впрочем, так в реальной жизни никто не поступает — мы просто проверили концепцию работы CGI-механизма. А правильно спроектированное приложение должно было запуститься, сделать свою работу и корректно завершиться.
Отмечу, что в качестве скрипта могут выступать скомпилированные приложения, Perl-скрипты, программы на Python'е и т.д. Для этого, правда, надо предварительно установить портированный на CE-платформу нужный интерпретатор. Поддержка PHP также прописана — условие его работы — также установка порта необходимых библиотек для CE-платформы.
Что касается механизмов реализации аутентификации и вопросов безопасности, то следует найти документацию именно к этой серии Apache и внимательно изучить.
Раз мы коснулись таких вопросов как подключение дополнительного функционала в виде PHP, то самое время посмотреть на сервер Pocket HPH, разработанный компанией MobileLeap. Сервер собран на платформе WM2003 (CE 4.20) и, скорее всего, более ранние WindowsCE-устройства не захотят работать с указанным продуктом.
Итак, данный сервер устанавливается уже в привычной манере, из cab-файла. В меню «Programs» запускаете соответствующий ярлычок и вуаля. Подтверждение старта — в трее Today висит значок программы. А сама программа предварительно уведомит, что сервер запустился.
Рис.3 — Pocket HPH готов к работе.
По умолчанию, сервер работает на порту 9000. Чтобы поменять значение — отредактируйте файл hph.ini. Настроек там немного. :-)
- port=9000 — используемый TCP-порт
- document_root=/Storage Card/wwwroot — путь к директории с HTML-документами
Помимо поддержки CGI, в сервере реализованы почти все PHP3-функции. Список функций доступен по ссылке http://10.0.0.200:9000/funcs.php. Загляните на главную страницу только что настроенного сервера — это http://10.0.0.200:9000 — и походите по ссылкам. Интересно будет взглянуть на состояние сервера по адресу http://10.0.0.200:9000/status.
Рис.4 — Такое впечатление, что виртуальная память считается некорректно.
В качестве БД, используется SQlite3. Насколько это здорово — судить вам, но первое впечатление — весьма недурно.
Рис.5 — Заполняем SQlite демо-базу значениями.
Рис.6 — И выполняем поиск по базе.
Впечатление от данного сервера на высоте.
И, напоследок, последний кандидат — разработка компании Cambridge Computer Corp. — сервер vxWeb. Он платный, о чем и поспешит напомнить по окончании установки.
Рис.7 — vxWeb готов к работе.
Настройки у этого сервера хранятся в виде файла конфигурации — vxWeb.txt. Во время работы можно переключаться между табами и смотреть, кто и что запрашивает с нашего web-сервера.
Рис.8 — Необходимая информация о статистике vxWeb на ладони.
Предлагаю рассмотреть содержимое конфигурационного файла.
Название | Значение | Описание |
DocumentRoot | /vxWeb/HTML/ | директория для HTML-файлов |
HostName | «Cambridge Computer» | подпись для сервера |
Port | 8000 | используемый порт |
CgiTimeOut | 0 | время (в мс) ожидания для завершения CGI-процесса |
StartPage | index.html | индексный файл |
ErrorLog | \vxWeb\error.log.txt | файл об ошибках |
ExecAlias | /cgi-bin /vxWeb/cgi-bin/ | алиасы для CGI-программ (всего можно задать 128 алиасов) |
DeleteDir | /vxWeb/delete/ | директория для хранения удаленных ресурсов |
TempDir | /vxWeb/temp | директория для временных файлов |
PathAlias | /images /vxWeb/images/ | алиасы для документов (всего можно задать 128 алиасов) |
ExtType | html text/html | тип документа (всего можно задать 256 различных типов) |
Рассмотренный web-сервер работает на платформах начиная с Windows CE 2.0.
Пример использования CGI-скриптов приведен в документации к продукту. Стоит в любом случае с ней ознакомиться, т.к. реализация CGI немного отличается от стандартной.
Однако приведенный ниже пример должен работать и здесь. Скомпилируйте и поместите в cgi-bin.
Насчет аутентификации — используется самая простая — на уровне простейшего .htpasswd-файла.
Мы подошли к концу нашего сегодняшнего обзора и вполне логично, что у многих может крутиться вопрос, а зачем же на КПК нужен web-сервер? Ответ прост — мир мобильных утсройств не ограничивается только теми приборами, что мы держим в руках. Бывает и так, что рядом с вами находится "умное" устройство (например, web-камера, дающая живую картинку с улицы), которое основано на Windows CE плаформе. Для конечного пользователя эти детали лишни и зачастую неинтересны, т.к. ему важнее получить конкретный результат — ту же картинку. А вот профессиональным разработчикам можно сократить время на реализацию своего решения, ибо клиент-серверное решение можно написать с нуля, а можно собрать, как с конструктором LEGO, из уже готовых компонентов. В нашем случае, из web-сервера и мобильного, вернее сказать Windows CE, устройства.
Применение решения, где работает "обогащенное" web-функциями устройство, может быть достаточно разнообразным. Оно может выступать как информационный портал на конференции, в кафе или местах, где отдыхают люди (те же аэровокзалы) — естественно, что это применимо для условий, где развернута WiFi-инфраструктура. Для промышленных применений — это микросборки и суб-блоки управления. В частности, устройство, которое представляет из себя виртуальный COM-порт. Оно преобразует запрос из ethernet-соединения у себя на входе в поток данных для COM-порта на выходе.
Конечно же, остро встает вопрос о грамотной организации доступа к устройству. Выше мы уже затронули механизмы разграничения доступа к данным web-сервера. Однако, актуальным остается вопрос логического доступа к самому Windows CE устройству. Ведь, пока активен стек сетевых протоколов (Ethernet, BlueTooth, IrDA) и текущая реализация платформы Windows CE предназначена для единственного пользователя в системе, всегда остается возможность несанкционированного дступа. Впрочем, это разговор для отдельной статьи.
На этом всё, удачи!
Листинг 1. Пример простейшего CGI-скрипта.
#include <stdio.h>
void main() {
/** вывести обычный заголовок, начинающий HTML-файл. **/
/** обратите внимание на дополнительную пустую строчку. **/
printf(«Content-type: text/html\n\n»);
/** вывести HTML-страницу на STDOUT. **/
printf("<html>\n»);
printf("<head><title>CGI Output</title></head>\n»);
printf("<body>\n»);
printf("<h1>Hello, world.<h1>n»);
printf("</body>\n»);
printf("</html>\n») ;
exit(0) ;
}
Полезные ссылки:
GoAhead WebServer
Apache CE
Pocket HPH
vxWeb
|