8000 GitHub - Manfred-Hu/WebServer: A C++ High Performance Web Server
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Manfred-Hu/WebServer

 
 

Repository files navigation

A C++ High Performance Web Server

Build Status license

Introduction

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

测试页: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

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

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.0%
  • C 5.5%
  • Makefile 1.8%
  • Roff 1.3%
  • CMake 0.3%
  • Shell 0.1%
0