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, может находься в любом месте на локальном диске

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.