Skip to content

Achigudan/WebServer

This branch is 2 commits behind linyacool/WebServer:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

788d98b · Nov 2, 2019

History

57 Commits
Oct 23, 2019
Nov 2, 2019
Mar 4, 2018
Feb 11, 2018
Nov 2, 2019
Feb 12, 2018
Feb 11, 2018
Nov 2, 2019
Feb 11, 2018
Oct 24, 2018
Nov 2, 2019
Feb 13, 2018
Feb 21, 2018
Mar 4, 2018
Mar 7, 2018
Mar 4, 2018
Oct 24, 2018
Feb 11, 2018

Repository files navigation

A C++ High Performance Web Server

Build Status license

Introduction

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

测试页:http://www.linya.pub/

Part Ⅰ Part Ⅱ Part Ⅲ Part Ⅳ Part Ⅴ Part Ⅵ
并发模型 连接的维护 版本历史 测试及改进 项目目的 面试问题

Envoirment

  • OS: Ubuntu 14.04
  • Complier: g++ 4.8

Build

./build.sh

Usage

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

Technical points

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

Model

并发模型为Reactor+非阻塞IO+线程池,新连接Round Robin分配,详细介绍请参考并发模型 并发模型

代码统计

cloc

Others

除了项目基本的代码,进服务器进行压测时,对开源测试工具Webbench增加了Keep-Alive选项和测试功能: 改写后的Webbench

About

A C++ High Performance Web Server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 91.2%
  • C 5.3%
  • Makefile 1.8%
  • Roff 1.3%
  • CMake 0.3%
  • Shell 0.1%