A Tiny Network Library
1.0.0
| Part Ⅰ | Part Ⅱ | Part Ⅲ | Part Ⅳ | Part Ⅴ | Part Ⅵ | Part Ⅶ |
|---|---|---|---|---|---|---|
| 项目介绍 | 项目特点 | 开发环境 | 并发模型 | 构建项目 | 运行案例 | 模块讲解 |
本项目是参考 muduo 实现的基于 Reactor 模型的多线程网络库。使用 C++ 11 编写去除 muduo 对 boost 的依赖,内部实现了一个小型的 HTTP 服务器,可支持 GET 请求和静态资源的访问,且附有异步日志监控服务端情况。
项目已经实现了 Channel 模块、Poller 模块、事件循环模块、HTTP 模块、定时器模块、异步日志模块、内存池模块、数据库连接池模块。
Ubuntu 18.04.6 LTS
g++ 7.5.0
vscode
git
cmake 3.10.2
项目采用主从 Reactor 模型,MainReactor 只负责监听派发新连接,在 MainReactor 中通过 Acceptor 接收新连接并轮询派发给 SubReactor,SubReactor 负责此连接的读写事件。
调用 TcpServer 的 start 函数后,会内部创建线程池。每个线程独立的运行一个事件循环,即 SubReactor。MainReactor 从线程池中轮询获取 SubReactor 并派发给它新连接,处理读写事件的 SubReactor 个数一般和 CPU 核心数相等。使用主从 Reactor 模型有诸多优点:
安装Cmake
sudo apt-get update
sudo apt-get install cmake下载项目
git clone [email protected]:Shangyizhou/tiny-network.git执行脚本构建项目
cd ./tiny-network && bash build.sh这里以一个简单的回声服务器作为案例,EchoServer默认监听端口为8080。
cd ./example
./EchoServer执行情况:
http模块有一个小型的HTTP服务器案例,也可以执行。其默认监听8080:
cd ./src/http && ./HttpServer这里的某些模块会配置 muduo 源码讲解,有些使用的是本项目的源码,不过实现思路是一致的。
Channel模块
Poller模块
EventLoop模块
Buffer模块
定时器模块
HTTP模块
异步日志模块
内存池模块
数据库连接池模块