Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Онощенко_КП_ИПП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
244.25 Кб
Скачать

3. Базовые концепции и структуры

В архитектуре Apache можно выделить следующие базовые объекты:

  1. Сервер.

  2. Коннект.

  3. Запрос.

  4. Процесс.

Каждый из этих объектов представлен соответствующей структурой в заголовочном файле httpd.h.

Помимо этих 4-х основных объектов в архитектуре Apache нужно отметить еще два объекта.

Первый объект — это пулы. Управлением ресурсов в Apache занимаются пулы — APR pools (apr_pool_t). Любой ресурс, выделяемый динамически, если он привязан к пулу, будет удален автоматически после использования. Пул привязывает ресурсы к жизненному циклу основных объектов, о которых мы сказали выше. Второй объект — это конфигурационный массив ap_conf_vector_t, причем каждому модулю в нем отводится свое место.

Массив хранит как глобальные конфигурационные данные, так и локальные.

В переводе на язык си основные четыре объекта представлены структурами:

request_rec

server_rec

conn_rec

process_rec

Более всего используются первые две. Каждый раз, когда на сервер приходит клиентский запрос, создается объект структуры request_rec, который передается в качестве параметра в любой обработчик, занятый обработкой запроса. Структура содержит не только стандартную информацию о HTTP-запросе, но и внутреннюю служебную информацию: пул запросов, массив глобальных и массив локальных конфигурационных записей, таблицы HTTP-заголовков, таблицу переменных окружения, указатели на сервер, коннект, фильтры, URL и его трансляцию, и т. д. Определение находится в httpd.h:

struct request_rec

{

apr_pool_t *pool;

conn_rec *connection;

server_rec *server;

request_rec *next;

request_rec *prev;

request_rec *main;

...

};

Структура server_rec представляет веб-сервер. Для каждого виртуального хоста имеется свой собственный экземпляр server_rec. Этот объект живет на протяжении всей жизни сервера. Ресурсы он берет из пула процессов. После структуры request_rec это вторая наиболее важная структура в Apache:

struct server_rec

{

process_rec *process;

server_rec *next;

const char *defn_name;

char *server_admin;

char *server_hostname;

apr_port_t port;

...

};

Структура conn_rec представляет TCP-коннект, создается при открытии коннекта и удаляется при его закрытии. Один коннект может породить несколько запросов. Запрос — это производный объект от коннекта:

struct conn_rec

{

apr_pool_t *pool;

server_rec *base_server;

void *vhost_lookup_data;

apr_sockaddr_t *local_addr;

apr_sockaddr_t *remote_addr;

...

};

Структура process_rec имеет более непосредственное отношение к операционной системе, нежели к архитектуре самого сервера. Пул процессов можно получить через нее посредством

server_rec -> process_rec -> pool.

Другие структуры Apache разнесены по разным хидерам, из которых можно выделить следующие группы:

  1. ap_ — хидеры с таким префиксом генерируют низко-уровневое API и напрямую, как правило, не используются.

  2. http_ — в этих хидерах находится API, представляющее наибольший интерес для разработчиков.

  3. util_ — эти хидеры аналогичны первой группе.

  4. mod_ — здесь находятся определения для модулей.

  5. apr_ — APR API.

Для разработчиков наибольший интерес представляют следующие заголовки:

http_config.h

http_connection.h

http_core.h

http_log.h

http_main.h

http_protocol.h

http_request.h

http_vhost.h

httpd.h

util_filter.h

ap_provider.h

mod_dbd.h

util_ldap.h

util_script.h

В начало

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]