C++ Linux Web服务器
- 使用Reactor+非阻塞socket+epoll(ET)+线程池实现多线程服务器模型
- 实现了基于最小堆的定时器,关闭超时未活动的连接
- 使用function+bind的C++11&14新语法代替虚函数实现回调
- 使用vector容器实现自动增长的用户缓冲区buffer
- 使用单例模式与阻塞队列实现了同步+异步的日志系统
- 实现了数据库连接池,减少数据库连接建立与关闭的开销,提高访问效率
- 使用shared_ptr与unique_ptr完成RAII手法,实现对资源的自动管理
- 使用正则表达式与状态机解析HTPP请求报文,支持解析GET与POST请求
- 使用mmap内存映射方法,提高服务器从磁盘中读取响应文件的速度
- 开启SO_LINGER套接字选项,实现close函数的延时返回,确保对端已确认全部数据
- CentOS 7
- MySQL 5.7
- Firefox
// 建立yourdb库
create database yourdb;
// 创建user表
USE yourdb;
CREATE TABLE user(
username char(50) NULL,
password char(50) NULL
)ENGINE=InnoDB;
// 添加数据
INSERT INTO user(username, password) VALUES('name', 'password');
make
./myWebServer
打开浏览器,网址栏输入http://本机IP:8888 ,进入Web服务器主页
如图,拥有展示主页、获取图片与视频以及注册和登录的功能
1000个客户端并发访问网站30s,每分钟响应请求数:221490 pages/min ,每秒钟传输数据量 2203845 bytes/sec,并发1000运行30秒后产生的TCP连接110745个,0 failed.