Skip to content

使用 C++ 11 重构陈硕的 muduo 库,去除 boost 依赖。内部实现有 HTTP 服务器,可支持 GET 请求。

Notifications You must be signed in to change notification settings

ox619/A-Tiny-Network-Library

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tiny C++ Network Library

https://img.shields.io/badge/license-MIT-green

项目介绍

本项目是参考 muduo 实现的基于 Reactor 模型的多线程网络库。使用 C++ 11 编写,内部拥有一个小型的 HTTP 服务器案例,可支持GET请求和静态资源的访问并能处理超时连接。内部附有异步日志实现,监控服务端情况。

项目特点

  • 底层使用 Epoll + LT 模式的 I/O 复用模型,并且结合非阻塞 I/O 实现主从 Reactor 模型。
  • 采用「one loop per thread」线程模型,并向上封装线程池避免线程创建,销毁的性能开销。
  • 采用 eventfd 作为事件通知描述符,高效派发事件到其他线程执行异步任务。
  • 基于双缓冲区实现的异步日志,避免数据落盘时阻塞服务。
  • 基于红黑树的定时器管理队列,基于 Linux 的 timerfd 分派定时任务,高效管理定时任务。
  • 遵循 RALL 手法使用智能指针管理内存,减小内存泄露风险。
  • 利用有限状态机解析 HTTP 请求报文。
  • 参照 Nginx 实现了内存池模块,更好管理小块内存空间,减少内存碎片。
  • 数据库连接池动态管理连接数量,防止多余连接浪费性能。

开发环境

  • 操作系统:Ubuntu 18.04.6 LTS
  • 编译器:g++ 7.5.0
  • 编辑器:vscode
  • 版本控制:git
  • 项目构建:cmake 3.10.2

构建项目

安装Cmake

sudo apt-get update
sudo apt-get install cmake

下载项目

git clone git@github.com:Shangyizhou/tiny-network.git

执行脚本构建项目

cd ./tiny-network && bash build.sh

运行案例

这里以一个简单的回声服务器作为案例,EchoServer默认监听端口为8080

cd ./example
./EchoServer

执行情况:

img

http模块有一个小型的HTTP服务器案例,也可以执行。其默认监听8080

cd ./src/http && ./HttpServer

img

项目模块讲解

这里的某些模块会配置 muduo 源码讲解,有些使用的是本项目的源码,不过实现思路是一致的。

Channel模块

Poller模块

EventLoop模块

Buffer模块

定时器模块

HTTP模块

异步日志模块

内存池模块

数据库连接池模块

感谢

About

使用 C++ 11 重构陈硕的 muduo 库,去除 boost 依赖。内部实现有 HTTP 服务器,可支持 GET 请求。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 76.4%
  • Makefile 18.7%
  • CMake 3.4%
  • C 1.4%
  • Shell 0.1%