本项目为Linux环境下的轻量级Web服务器,项目代码为C++ 11 风格。
实现了实现对一定数量客户端服务的支持与响应,并允许客户端访问静态网页资源。
- 采用主从 Reactor + 线程池模式作为框架,使用 Epoll 实现 IO 多路复用。
- 依据生产者消费者模型,构建线程池,使得服务器能够处理并发请求。采用单例模式构建数据库连接池,并实现了对数据库连接的 RAII 管理。
- 采用有限状态机的思想解析处理 HTTP 报文。
- 依据多生产者单消费者模型,通过阻塞队列实现了服务器的异步日志系统。
- 基于小顶堆维护一个定时器,记录客户端连接的时间信息,并及时关闭不活跃连接。
- 仿照实现了自动增长的缓冲区。
- 使用互斥锁和条件变量实现PV信号量。
- 单缓冲区日志 - > 读写双缓冲区日志
- 内存池
- 池连接的负载均衡
- 对于响应文件内存映射的页面缓存 / LFU OR LRU?
- 服务器性能测试
- Linux
- C++ 14
- MySQL
-
Note——项目实现过程中所做的笔记
-
build
-
src——代码文件
-
test——针对各个模块的功能测试
-
resources——网页静态资源(暂无)
-
log——运行时日志(运行时创建)
// 创建数据库
create database webserver;
// 创建user表
USE webserver;
CREATE TABLE user(
username char(50) NULL,
password char(50) NULL
)ENGINE=InnoDB;
// 添加数据
INSERT INTO user(username, password) VALUES('name', 'password');进入项目根目录
make待完成后,运行以下命令即可打开Web服务器
./bin/server该部分仅针对本人在项目过程中考虑过的适合自己学习的功能实现顺序。
- lock
- buffer
- DBConnPool
- ThreadPool
- http
- timer
- log
- server
项目过程中参考借鉴了以下内容,受益匪浅。
-
Linux高性能服务器编程,游双