# WebServer **Repository Path**: ahzz123/web-server ## Basic Information - **Project Name**: WebServer - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-01 - **Last Updated**: 2021-03-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebServer #### 介绍 基于C++11的静态HTTP服务器,目前实现了以下功能: - 解析部分`GET`和`POST`请求 - 支持HTTP长连接 - 支持Cgi服务 - 关闭超时连接 - 固定大小的LRU文件缓存 - 动态扩容的TCP连接池 #### 测试环境 1. Ubuntu 18.04 & g++ 7.5.0 2. Ubuntu 16.04 & g++ 5.4.0 #### 安装教程 ```shell $ git clone https://gitee.com/ahzz123/web-server.git $ cd web-server $ mkdir build && cd build $ cmake .. $ make ``` #### 使用说明 ```shell $ cd bin $ ./HttpServer [thread_numbers] ``` TODO #### 技术点 - 实现了简单的应用层缓冲区和线程安全的简单日志 - 使用EPoll水平触发的IO多路复用技术,非阻塞IO - 使用Reactor事件处理模式,在程序启动时建立固定大小的线程池,主线程只负责accept请求,并以Round Robin的方式将请求分发给其他工作线程 - 使用eventfd实现线程的异步唤醒 - 使用智能指针等RAII机制防止内存泄漏 - 使用状态机解析HTTP请求 - 提供CGI接口 - 使用小根堆管理定时器,关闭超时连接 - 实现固定大小的LRU文件缓存机制 - 实现动态扩容的TCP连接池 - 进行了部分模块的简单功能测试和单元测试 #### TODO - [x] 解析`multipart/form-data` - [x] 实现Cgi服务 - [x] 实现超时请求的关闭 - [x] 实现文件缓存,降低重复读取文件的开销 - [x] 实现连接池降低降低频繁的申请和销毁`TcpConnection`的开销 - [ ] 进一步完善功能测试和单元测试 - [ ] 实现异步日志系统 - [ ] 使用webbench进行服务器测压 - [ ] 动态读取服务器配置 - [ ] 完善说明文档 #### 收获 - 熟悉了linux的网络编程api - 熟悉了`lsof`、`netstat`、`nc`和`curl`等工具的使用 #### 参考 1. [stepByStepToSky/Web-Server](https://github.com/stepByStepToSky/Web-Server) 2. [linyacool/WebServer](https://github.com/linyacool/WebServer) 3. [chenshuo/muduo](https://github.com/chenshuo/muduo) 4. [ EZLippi/Tinyhttpd](https://github.com/EZLippi/Tinyhttpd) 5. 《linux高性能服务器编程》 6. 《linux多线程服务端编程》 7. 《UNIX环境高级编程》 8. 《UNIX网络编程:卷1》 9. 《图解HTTP》