基于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文件。