Menu

Tree [r9] /
 History

HTTPS access


File Date Author Commit
 www 2011-02-02 alpa4ino [r5] 1. Developed job_cgi
 Makefile 2011-02-03 alpa4ino [r6] Made a fork in main application loop and made s...
 README.ru 2010-12-08 alpa4ino [r1] Initial download
 TODO 2010-12-08 alpa4ino [r1] Initial download
 http_request.h 2011-02-09 alpa4ino [r8] Made a lot of chenges
 http_response.cpp 2011-02-09 alpa4ino [r8] Made a lot of chenges
 http_response.h 2011-02-09 alpa4ino [r8] Made a lot of chenges
 job.cpp 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job.h 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_cgi.cpp 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_cgi.h 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_constructor.cpp 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_constructor.h 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_default.cpp 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_default.h 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_download.cpp 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 job_download.h 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 main.cpp 2011-02-09 alpa4ino [r8] Made a lot of chenges
 manager.cpp 2011-02-09 alpa4ino [r8] Made a lot of chenges
 manager.h 2011-02-04 alpa4ino [r7] 1. Made pid file read/write, so now sever can b...
 qhttp 2011-02-09 alpa4ino [r8] Made a lot of chenges
 qhttp.config 2011-02-09 alpa4ino [r8] Made a lot of chenges
 qhttp_options.cpp 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 qhttp_options.h 2011-03-25 alpa4ino [r9] 1. Changed http parsing
 servlet.cpp 2011-02-09 alpa4ino [r8] Made a lot of chenges
 servlet.h 2011-02-04 alpa4ino [r7] 1. Made pid file read/write, so now sever can b...
 uri.cpp 2011-02-02 alpa4ino [r5] 1. Developed job_cgi
 uri.h 2010-12-09 alpa4ino [r2] Synchronized project with lcommon project chang...
 worker.cpp 2011-01-28 alpa4ino [r3] 1. chengd config file to tree style. 2. started...
 worker.h 2011-01-28 alpa4ino [r3] 1. chengd config file to tree style. 2. started...

Read Me

Проект ghttp.

Qhttp - простейший http сервер.
Сервер работает по принципу многопоточности и мультиплексирования. Каждый поток может прослушивать несколько клиентских соединений.
Количество потоков и соединений устанавливаются в конфигурационном файле.
Принцип работы следующий. Главный поток, реализованный в классе qhttp::manager, создает дочерние потоки - сервлеты, qhttp::servlet.
Количество сервлетов указано в конфигурационном файле. С каждым сервлетом главный поток устанавливает постоянное соединение посредством
объекта qhttp::duplex_channel, являющемся по существу оберткой над posix pipe. В дальнейшем вся синхронизация между главным
потоком и сервлетами осуществляется через эти каналы.
Главный поток слушает порт, указанный в конфигурационном файле. При получении нового соединения, он находит наименее
загруженный в данный момент сервлет и передает ему по вышеупомянутому каналу дескриптор сокета. Каждый сервлет постоянно опрашивает
этот канал с помощью системного вызова poll. При получении нового дескриптора, он добавляет его в список опрашиваемых дескрипторов
для мониторинга с помощую системного вызова poll и обрабатывает запрос с помощью объекта qhttp::worker. Далее на основе разных параметров
http запроса создается соответствуйщий запросу обработчик, который делает всю работу, подготавливает http ответ. Объект qhttp::worker
отправляет запрос обратно клиенту. Если не установлен режим keep-alive, сокет закрывается, сервлет освобождает ресурсы связанные с данным запросом
и посылает по каналу сообщение главному потоку о том что соединение обратотано.
В настоящий момент worker может создать только один тип обработчика - обработчик мутода GET, возвращающий содержимое файлов целиком.

TODO:
Достаточно много TODO. Обработка разных методов http, оптимизация разбора http запросов. Locations, обработка главный потоком сообщений от сервлетов
через poll или select, логгирование.
В настоящий момент приложение не демонизируется. Нужно написать скрипт, которые запускает приложение qhttp, останавливает, перезапускает его и т.д.

INSTALL:

Запустите утилиту make в дирректории проекта и убедитесь что qhttp файл создан.

RUN:

В начальной версии приложение не демонизируется, поеэтому его можно запустить в консоли так:

./qhttp <имя конфигурационного файла> или ./qhttp <config file> &

В последнем случае на запускающего возлагается задача отправления процессу сигнала kill для завершения приложения.
Шаблон конфигурационного файла находится в главной дирректории проекта под названием qhttp.config

BEFORE RUN:

Перед запуском необходимо убедиться в правильной установке следующих переменных в конфигурационном файле:

portno       - порт, который будет прослушивать сервер, должен быть свободен
virtual_path - корневая дирректория где сервер будет осуществлять поиск всех документов
default_page - имя файла по умолчанию. Должно быть в vaitual_path.
error400     - полное имя файла ошибки 400, может находься в любом месте на локальном диске
error404     - полное имя файла ошибки 404, может находься в любом месте на локальном диске
error502     - полное имя файла ошибки 500, может находься в любом месте на локальном диске