基於C ++ 11的HTTP服務器的實現,這很容易添加CGI實例。它可以處理靜態資源,支持HTTP長連接等等。我們還實現了異步日誌以記錄服務器的狀態。
測試頁面:extplecgi,logincgi和uploadcgi
a)將源文件編譯為二進制可執行文件(在根文件夾中)
bash install.shb)運行程序(在構建文件夾中)
cd build
./httpcgiservermaina)編寫一個CGI實例類,該類別繼承了basecgi類,例如Exipplecgi。
b)將CGI實例添加到CGIINSTANCEFACTORY中。
c)將標題文件添加到CGIHEADER中。
d)修改cmakelists.txt。
e)然後構建和運行。
Webbench的測試結果如下所示。
有關實現的簡要概述,請參見Inpldoc.md。標題文件指南:
基礎/日誌。 H接口的日誌系統,來自異步日誌。
epoller.h封裝了epoll的相關功能。
Netutil.h封裝了插座FD的相關功能。
SimpleBuffer.h應用程序層緩衝區(我們現在僅實現LT模型)。
Channel.h封裝通道(事件)相關的回調函數(讀/寫/錯誤函數)。
Minheap.h使用Min Heap來管理過期的連接時間。
Eventloop.h IT管理頻道(事件),該通道(事件)被重新安置到Epoller,並處理活動頻道(事件)。
eventloopthread.h它管理一個連接隊列,而主接受線程將連接套接字fd進入隊列,然後此線程將套接字fds添加到其Eventloop中。
eventloopthreadpool.h它管理多個線程,主要接受線程推送連接套接字fd到線程池中,它將插座分配到其線程。
tcpserver.h接受連接套接字FD,當連接套接字上讀取讀取事件時,它會自動將字節流讀取到頻道的應用程序緩衝區中,並執行讀取回調函數。與寫和錯誤事件相同。
httpmessage.h解析http請求,構建http響應消息。在這裡,我們使用狀態機來處理HTTP請求。
basecgi.h CGI實例類的抽像類。它提供了一個流程接口,我們使用它來處理CGI請求。
includecgiheader.h包括用於CGIDISPATCH的CGI實例類。
CGIDISPATCH.h使用URL查找CGI實例的CGI調度器執行CGI程序。
httpcgiserver.h讀取事件時,它首先在頻道的應用程序緩衝區中解析HTTP請求,然後找到CGI實例並處理請求。
httpcgiservermain.cpp http服務器主。
extplecgi/extplecgi.h和logincgi/logincgi.h示例如何編寫CGI實例類。 WebFile/Login包括Logincgi類所需的.html,.js,.css文件。