本项目为C++编写的多线程Web服务器(使用了C++11新特性),在应用层实现了Http服务器,其中Http服务器实现了解析Get、Post、Head等请求,目前支持访问静态资源、Http长连接、管线化请求,加入了异步日志记录状态诊断故障。
服务器编程采用“no-blocking IO+IO multiplexing”(Reactor)模式,在这个模型下每个IO线程都有一个事件循环(event loop),通过事件循环分发任务来实现用于处理读写和(单次或者周期性)定时事件。
Linux: 18.04.2
Complier: g++ 7.4.0
在WebServer目录下
cmake . && make
在WebServer/net/http目录下(threadNum为可选参数,设置线程数)
./httpserver_test [-threadNum]
服务器运行起来之后在浏览器访问服务器http://127.0.0.1:8000 之后的显示效果
- 使用智能指针管理对象资源
- 使用Eventfd实现线程异步唤醒
- 支持Http长连接、短连接
- 实现了异步日志
- 基于Poll的IO多路复用实现了Reactor模式(有待改进成Epoll)
- 支持优雅关闭连接
- 支持线程池实现多线程IO(线程轮转采用round-robin轮询调用)