СТАТЬЯ
22.06.01

Разработка приложений для Apache с помощью Kylix Server Developer

Предыдущая часть

Colin A.Ridgewell, http://www.haydenr.com
Copyright© 2001. Borland Software Corporation.

Процессы web-сервера Apache

При запуске web-сервер Apache создает много экземпляров серверного процесса. Это довольно разумная схема, позволяющая Apache мгновенно обслуживать множество входящих запросов. Введите команду, приведенную на рисунке 28, и вы увидите, что один экземпляр сервера выполняется как root, а множество других экземпляров – как пользователи вашего web-сервера Apache (в соответствии с назначениями в httpd.conf, произведенными с помощью команды User).

ps –aux | grep apache

Рисунок 28. Команда для просмотра всех выполняемых процессов Apache.

Root-копия не обслуживает запросы, т.к. у нее очень высокие требования к безопасности. Она действует как ‘master’ (главная) копия, контролируя все дочерние процессы Apache. Каждый дочерний процесс Apache заносит все свои состояния занятости и ожидания в карту меток (scoreboard). Главный процесс Apache проверяет эту карту. Если все дочерние процессы заняты, и, при этом, получены новые входящие запросы, то для их обслуживания создаются новые дочерние процессы. Если же в состоянии ожидания оказывается слишком много дочерних процессов, то главный процесс Apache их удаляет. Такой механизм является одним из свойств Apache Virtual Hosting, который управляется такими командами в httpd.conf, как ScoreBoardFile, MaxClients, MaxRequestsPerChild, MaxSpareServers, MinSpareServers, StartServers и другие.

DSO-модули Apache

DSO – это Динамический разделяемый объект, выполняющий те же функции, что и динамическая подключаемая библиотека, DLL, для Windows. DSO поддерживает динамическое связывание и загрузку общего кода в исполняемый файл во время его выполнения. В качестве примеров DSO можно привести .so-файлы в каталоге kylix/bin или /usr/lib. Помните, как правило, расширение файла .so указывает на то, что данный файл является DSO. Существует два варианта использования DSO в Linux, как разделяемые библиотеки и разделяемые файлы.

Разделяемая библиотека представляет DSO, в котором статическое связывание с исполняемой программой устанавливается во время создания с помощью компоновщика. Он создает жестко закодированую ссылку на библиотеку в исполняемой программе, так что позже Linux сможет найти DSO по жестко закодированному пути или по путям, сконфигурированным с помощью переменной окружения.

LD_LIBRARY_PATH.

Разделяемый объект является DSO только тогда, если связывание было установлено во время выполнения. Исполняемая программа просит Linux загрузить DSO в адресное пространство, разрешая любые символы, так что DSO выглядит, как статически связанный.

Web-сервер Apache разрабатывался на модульной основе. В ядро встроен API расширяемого модуля, поддерживающий совместимый интерфейс. Большая часть операций Apache реализована в наборе DSO-модулей, оставляя ядро в минимальном составе. Такой подход имеет ряд преимуществ:

Если вы хотите посмотреть, какие модули скомпилированы в ваш исполняемый модуль Apache, введите команду, приведенную на рисунке 29. Обратите внимание, что ваш исполняемый модуль Apache (httpd) может находиться в другом каталоге.

/usr/local/apache/bin/httpd –l

Рисунок 29. Команда для просмотра всех модулей, скомпилированных в Apache.

Конфигурирование Apache для поддержки DSO

Для того, чтобы Apache DSO, написанные в Kylix, могли корректно работать, Apache должен быть сконфигурирован так, чтобы его ‘ядро’ было ‘разделяемым’. В результате этого, Apache сможет экспортировать символы своего ядра, необходимые для Kylix DSO. Если ‘ядро’ считается ‘разделяемым’, это означает, что все функциональные возможности ядра Apache сами устанавливаются в DSO с именем libhttpd.so, а исполняемая программа httpd становится программой автозагрузки. Так как невозможно связать DSO со статическими библиотеками, на всех платформах для связывания libhttpd.so и автоматически загружаемой программы httpd используется дополнительная исполняемая программа под именем libhttpd.ep.

Вам потребуется исходный код Apache; если у Вас его еще нет на CD-ROMе, то его можно скачать с http://www.apache.org. Чтобы извлечь исходный код, скопируйте файл tar.gz в каталоги, типа /usr/src, а затем извлеките исходный код с помощью команды, приведенной на рисунке 30.

tar –zxvf apache_1.3.14.tar.gz

Рисунок 30. Извлечение исходного кода Apache.

Теперь, чтобы можно было сделать версию Apache с разделяемым ядром, необходимо создать скрипт-файл config.status (или изменить его, если таковой уже существует). Скрипт-файл config.status следует создавать в корневом каталоге, из которого был извлечен исходный код Apache. На рисунке 31 показаны записи, которые должны быть в скрипт-файле config.status.

#!/bin/sh
CFLAGS="-g" \ (Note: Only for debug intro) CFLAGS_SHLIB="-g" \
LIBS="/usr/lib/libpthread.so" \ ./configure \ "--with-layout=Apache" \ "
--enable-module=so" \ "--enable-rule=SHARED_CORE" \ "$@"

Рисунок 31. Записи в скрипт-файле config.status, необходимые, чтобы сделать ядро Apache разделяемым.

После создания скрипт-файла config.status необходимо создать и инсталлировать Apache, используя команду, приведенную на рисунке 32. Помните, что сначала следует изменить полномочия для скрипт-файла config.status.

chmod 755 config.status ./config.status" make make install

Рисунок 32. Создание и инсталляция Apache.

В результате, мы получаем версию Apache, поддерживающую DSO, созданные в Kylix.

Создание DSO-модулей Apache с использованием Kylix

Создание DSO-модуля Apache с помощью Kylix внешне ничем не отличается от создания CGI-web-приложения Apache. Единственное отличие заключается в том, что нужно будет выбрать опцию ‘Apache Shared Module (DSO)’ в мастере New web Server Application (Новое web-серверное приложение) (см. Рисунок 1). DSO-web-приложение Apache использует уже описанную выше архитектуру WebBroker. Таким образом, разработка Apache DSO ничем не отличается от разработки любого другого приложения WebBroker.

При разработке DSO в Kylix вы должны помнить о трех важных строках, расположенных в файле проекта DSO (.drp). Чтобы открыть файл проекта, выберите опцию меню Project View Source. Эти строки устанавливает Kylix, но вы можете изменить их. На рисунке 33 приведен пример файла проекта DSO.

library HelloModule;
uses
WebBroker,
ApacheApp,
HelloUnit in 'HelloUnit.pas'
{WebModule1: TWebModule};
{$R *.res}
exports
apache_module name 'Hello_module';
begin
ModuleName:='HelloWorld_module';
ContentType:= 'hello-handler';
Application.Initialize;
Application.CreateForm(TWebModule1, WebModule1);
Application.Run;
end.

Рисунок 33. Пример файла проекта DSO.

Обратите внимание на имя экспортируемого модуля; это имя, использованное в команде LoadModule из httpd.conf. Переменная ModuleName используется в рамках Apache API, а ContentType сообщает Apache, какой контент обрабатывает данный DSO.

Когда вы компилируете Apache DSO, он создает не исполняемую программу, а DSO-файл под именем lib<projectname>.so (в соответствии с правилами задания имен для DSO). Скомпилированный DSO следует скопировать в тот же каталог, в котором находятся все остальные Apache DSO. Затем нужно добавить запись в httpd.conf, как показано на рисунке 34; после чего следует перезапустить сервер.

LoadModule Hello_module libexec/libHelloModule.so
<Location /HelloWorld>
SetHandler hello-handler
</Location>

Рисунок 34. Строка в httpd.conf для DSO-модуля.

Для приведенного выше примера, чтобы вызвать DSO-модуль из браузера, следует использовать URL http://localhost/HelloWorld.

DSO-web-приложения Apache используют в Kylix два модуля, с именами HTTPD.pas и ApacheApp.pas. Модуль HTTPD.pas представляет собой заголовок файла на языке PASCAL для Apache API. ApacheApp.pas содержит класс, называемый TApacheApplication, который формирует пакет обработчика запросов WebBroker. При инициализации приложение WebBroker само присоединяется к Apache посредством API.

Kylix и XML

NetCLX-архитектура основана на HTTP; Kylix-приложения, построенные с использованием NetCLX можно использовать для генерации различных MIME-типов помимо HTML; документы на языке XML (Extensible Markup Language) могут также форматироваться и использоваться в качестве ответов на входящие http-запросы. Например, установите в TPageProducer XML-шаблон вместо HTML-шаблона. Так как Delphi 5 поддерживает WebBroker (NetCLX)-архитектуру, издано уже множество статей об использовании WebBroker с XML. Вся приведенная в них информация действительна и для Kylix. Приводим URL-ссылку на одну из статей:

Generating XML and Delivering It Across the web (Генерация и передача XML по сети Internet) Keith Wood

http://www.delphizine.com/features/2000/02/di200002kw_f/di200002kw_f.asp

Kylix и WAP

NetCLX-архитектура может также использоваться для доставки web-приложения посредством WAP (Wireless Application Protocol). В этом случае мы используем NetCLX для генерации WML-документов (WML – Wireless Markup Language). Так как Delphi 5 поддерживает WebBroker (NetCLX)-архитектуру, издано уже много статей об использовании WerBroker с WAP. Вся приведенная в них информация действительна и для Kylix. Приводим URL-ссылку на одну из статей:

WAP! Delphi Does Wireless (Delphi работает на WAP) Jani Jarvinen

http://www.delphizine.com/features/2000/04/di200004jj_f /di200004jj_f.asp

Заключение

После прочтения данной статьи вы несомненно почувствуете, как просто, используя Kylix от Borland, можно разрабатывать web-серверные приложения Apache, а также web- и Internet-приложения. На самом деле, здесь представлена только самая общая краткая информация о возможностях Kylix и Apache. Автор имеет длительный опыт раздельного использования Delphi и Linux. И этот опыт дает ему право предположить, что совместное использование Kylix и Linux является очень мощным средством разработки и интеграции оригинальных Linux-приложений для e-бизнес-решений.

Kylix в сочетании с Apache – это абсолютно расширяемая система. Они могут использоваться для разработки Intranet-решения любого объема или для принятия наиболее важных e-бизнес-решений на кластере Linux.

Приложение

А. Конфигурация системы, использованная для приведенных примеров.

Ниже приведен список программного обеспечения, использованного при разработке примерных приложений, описанных в настоящем докладе. Список приведен в целях информации и для удобства читателя:

Б. Полезные Internet-ссылки

Ниже приведены ссылки на некоторые web-сайты с полезной информацией по Kylix и Apache:

Kylix

Apache

Дополнительная информация

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Обсудить на форуме Inprise/Borland
Отправить ссылку на страницу по e-mail


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 28.04.01