Реализация HTTP -сервера на основе C ++ 11 , который легко добавить экземпляр CGI. Он может обрабатывать статические ресурсы, поддерживать длинные соединения HTTP и так далее. Мы также реализуем асинхронный журнал для записи состояния сервера.
Тестовая страница : Примечание, logincgi и uploadcgi
а) Скомпилировать исходные файлы в двоичные исполняемые файлы (в корневой папке)
bash install.shб) Запустите программу (в папке сборки)
cd build
./httpcgiservermainа) Напишите класс экземпляров CGI, который наследует класс BaseCgi, как примеры.
б) Добавьте экземпляр CGI в CGIInStanceFactory.
C) Добавьте файл заголовка в CGIHeader.
г) изменить cmakelists.txt.
д) Затем строить и запустить.
Результат тестирования Webbench показан здесь.
См. Impldoc.md для краткого обзора реализации. Руководство по файлам заголовков:
Base/log.h Интерфейс для системы журнала, которая из асинхронного журнала.
Epoller.h инкапсулирует связанные функции Epoll.
netUtil.h инкапсулирует связанные функции сокета FD.
SimpleBuffer.h Buffer Layer (мы реализуем только модель LT сейчас).
Channel.h Инкапсулируйте функции Callack (Event), связанные с функциями обратного вызова (функции чтения/записи/ошибки).
MinHeap.H Используйте мин кучи, чтобы управлять истекшим временем соединения.
Eventloop.h он управляет каналом (событие), который восстанавливается в Epoller, и обрабатывает активные каналы (события).
Eventloopthread.h он управляет очередью подключения, а основной разъем подключения потока приема FD в очередь, а затем этот поток добавляет Socket FDS в свой EventLoop.
Eventloopthreadpool.h он управляет несколькими потоками, основным разъемом подключения потока приема FD в The Threadpool, он отправляет гнездо на свои потоки.
tcpserver.h принять сокет подключения FD, и когда событие чтения восходит к сокету подключения, он автоматически считывает поток байта в буфер приложения канала и выполняет функцию обратного вызова чтения. Так же, как и события записи и ошибок.
httpmessage.h. Распоряжайте HTTP -запрос, построить http -ответ. Здесь мы используем государственную машину для обработки HTTP -запросов.
BaseCgi.h абстрактный класс класса экземпляров CGI. Он предоставляет интерфейс процесса, мы используем его для обработки запроса CGI.
IncludeCgiHeader.H включите класс экземпляров CGI, который используется для CGIDISPATCH.
cgidispatch.h Диспетчер CGI, который использует URL, чтобы найти экземпляр CGI, для выполнения программы CGI.
httpcggiserver.h Когда событие чтения произошло, он сначала анализирует HTTP -запрос в буфере приложения канала, затем находит экземпляр CGI и обрабатывает запрос.
httpcgigervermain.cpp http server main.
examplecgi/examplecgi.h и logincgi/logincgi.h Пример того, как написать класс экземпляра CGI. WebFile/Login включает в себя файлы .html, .js, .css, необходимые для класса Logincgi.