Linux下基于单Reactor多线程模型的Web服务器.
- 使用epoll(ET模式) + 非阻塞socket, 参考muduo的Channel抽象出socket的事件, epoll触发事件后交给线程池处理.
- 基于Ragel状态机的HTTP报文解析器, 支持GET和POST请求, 以及200, 400, 403, 404等响应状态. 状态机的头文件参考了大名鼎鼎的http-parser, Ragel的介绍见其主页.
- 基于阻塞队列和双缓冲的异步日志系统. 参考muduo和minilog.
- 简单的线程池实现, 只要往里面塞任务即可. 参考CThreadPool.
- 基于红黑树(std::set)的定时器管理器. 参考muduo.
- 使用epoll的ET模式时, 写操作存在一定问题, 试试直接用LT模式.
- std::coroutine.
- 线程池的自动扩缩容, 负载均衡.