加入CODE CHINA

· 不限速    · 不限空间    · 不限人数    · 私仓免费

免费加入
    README.md

    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

    项目简介

    🚀 Github 镜像仓库 🚀

    源项目地址

    https://github.com/linyacool/webserver

    发行版本

    当前项目没有发行版本

    贡献者 2

    开发语言

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