Skip to content

1410138/MyWebServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyWebServer

C++ Linux Web服务器

实现

  • 使用Reactor+非阻塞socket+epoll(ET)+线程池实现多线程服务器模型
  • 实现了基于最小堆的定时器,关闭超时未活动的连接
  • 使用function+bind的C++11&14新语法代替虚函数实现回调
  • 使用vector容器实现自动增长的用户缓冲区buffer
  • 使用单例模式阻塞队列实现了同步+异步的日志系统
  • 实现了数据库连接池,减少数据库连接建立与关闭的开销,提高访问效率
  • 使用shared_ptrunique_ptr完成RAII手法,实现对资源的自动管理
  • 使用正则表达式状态机解析HTPP请求报文,支持解析GETPOST请求
  • 使用mmap内存映射方法,提高服务器从磁盘中读取响应文件的速度
  • 开启SO_LINGER套接字选项,实现close函数的延时返回,确保对端已确认全部数据

原理图

Reactor11e8ae0507415d5a.md.png

测试环境

  • 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服务器主页

运行结果

e8862dcae57c337514ca7440db1c5bd331a497b09f8bac5e.jpeg

如图,拥有展示主页、获取图片与视频以及注册和登录的功能

压力测试

fba30396da32490bc97d22f3e35fe45278f04eeef4fa1bee.md.jpeg

1000个客户端并发访问网站30s,每分钟响应请求数:221490 pages/min ,每秒钟传输数据量 2203845 bytes/sec,并发1000运行30秒后产生的TCP连接110745个,0 failed.

实现细节

About

C++ Linux Web服务器

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published