-
基于C++编写的服务器,支持解析get请求,处理静态资源;
-
使用非阻塞的EPOLL边沿触发(ET模式)实现IO多路复用;
-
使用线程池提高并发度,降低频繁创建、销毁线程的开销;
-
使用有限状态机解析http请求;
-
支持日志系统,记录服务器运行情况及资源访问情况;
-
usage: ./WebServer port
-
默认网站根目录(src/http_conn.cpp: line-37):/var/www
操作系统:Ubuntu 20.04.2 LTS
编译器:g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
自动化构建:cmake (version 3.16.3)
cd build
cmake ..
make
./WebServer 8989
.
├── build #构建目录
│ └── readme.md #编译命令说明
├── CMakeLists.txt #cmake
├── include #头文件目录
│ ├── http_conn.h #http逻辑处理 头文件
│ ├── http_content_type.h #记录http content-type文件类型
│ ├── locker.h #封装线程同步机制
│ ├── log.h #日志系统 头文件
│ ├── threadpool.h #线程池
│ └── timer.h #定时器 时间堆(小顶堆) 头文件
├── LICENSE
├── README.md #项目说明文档
└── src #源文件目录
├── http_conn.cpp #http逻辑处理
├── log.cpp #日志系统
├── main.cpp #主函数
└── timer.cpp #时间堆(小顶堆)
3 directories, 14 files
点击访问 -->【基于EPOLL边沿触发(ET模式)和线程池的Web服务器 - 独人欣赏】
- 2021-08-18 --- v0.5.0
- 新增:定时器模块,定时发出信号,由独立的线程调用相应的回调函数;
- 优化:降低LOG::get_time()函数的执行频率,由定时器控制每60秒执行一次;
- 优化:去除独立的日志线程,改由定时器定时将日志数据写入文件;
- 优化:大幅降低使用write系统调用的次数,提升运行效率;
- 优化:代码及部分注释清理、优化;
- 2021-08-15 --- v0.3.5
- 优化:自动获取服务器ip地址,无需在运行时手动输入;
- 2021-08-14 --- v0.3.3
- 新增:守护进程,服务器启动后将脱离终端,在后台运行;
- 优化:日志模块,写文件之前判断日志文件是否存在,若不存在则重新创建;
- 优化:日志模块,添加日志记录时间、优化日志记录格式;
- 2021-08-13 --- v0.3.0
- 新增:日志系统,记录服务器运行情况及资源访问情况;
- 新增:ip地址及端口号合法性校验;
- 2021-08-12 --- v0.2.0
- 新增:支持访问文件名为中文的文件;
- 新增:添加更多响应头部字段 -> Content-Type(默认text/plain)、Date(GMT);
- 修复:修复文件内容为中文时的乱码问题(未指定字符集);
- 优化:代码清理;
- 2021-08-11 --- v0.1.0
- 初始版本:《Linux高性能服务器编程》示例代码