High-performance web server written in C++
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode add comments Feb 14, 2019
WebBench 压测 Feb 14, 2019
WebServer add comments Feb 14, 2019
old_version
pictures
.travis.yml
CMakeLists.txt modify and add some files Jan 19, 2019
LICENSE Create LICENSE Jan 18, 2019
README.md Update README.md Feb 14, 2019
build.sh modify and add some files Jan 19, 2019
并发模型.md
测试及改进.md
版本历史.md
连接维护.md Update 连接维护.md Feb 6, 2019
遇到的困难.md Update 遇到的困难.md Feb 13, 2019
面试问题.md
项目目的.md Update 项目目的.md Feb 6, 2019

README.md

High-performance web server written in C++

Build Status

本项目已经在 https://travis-ci.org 网站上通过了编译,详情可点击左上角绿色的passing图标进行查看。

项目简介

本项目为C++11编写的Web服务器,解析了get、head请求,可处理静态资源,支持HTTP长连接,支持管线化请求,并实现了异步日志,记录服务器运行状态。

测试页:http://www.xiongcw.xyz/

Part I Part II Part III Part IV Part V Part VI Part VII
并发模型 连接维护 测试及改进 项目目的 遇到的困难 版本历史 面试问题

开发环境

  • OS: Ubuntu 16.04
  • Complier: g++ 5.4

编译

./build.sh

使用方法

./WebServer [-t thread_numbers] [-p port] [-l log_file_path(should begin with '/')]

技术要点

  • 使用Epoll边沿触发的IO多路复用技术,非阻塞IO,使用Reactor模式
  • 使用多线程充分利用多核CPU,并使用线程池避免线程频繁创建销毁的开销
  • 使用基于小根堆的定时器关闭超时请求
  • 主线程只负责accept请求,并以Round Robin的方式分发给其它IO线程(兼计算线程),锁的争用只会出现在主线程和某一特定线程中
  • 使用eventfd实现了线程的异步唤醒
  • 使用双缓冲区技术实现了简单的异步日志系统
  • 为减少内存泄漏的可能,使用智能指针等RAII机制
  • 使用状态机解析了HTTP请求,支持管线化
  • 支持优雅关闭连接

模型选择

并发模型为Reactors+非阻塞IO,新连接采用Round Robin(轮叫)的方式分配,详细介绍请参考并发模型

并发模型

代码统计

codeStatistics

其他

除了项目基本的代码,用开源测试工具Webbench来对服务器进行压测。