本项目是参照muduo仿写的基于主从Reactor模型的多线程网络库。使用c++11的新特性编写,去除了muduo对boost的依赖。目前项目已经实现了Http 服务器模块、定时器模块、Channel模块、Poller模块、EventLoop模块、TcpServer模块、Buffer模块、日志模块。
# 代码文件主要结构
TinyNetwork/
├── include/
│ ├── base/
│ ├── http/
│ ├── logger/
│ ├── net/
│ │ │── poller/
│ │ └── timer/
│ └── pool/
│ └── ThreadPool/
├── src/
│ ├── base/
│ ├── http/
│ ├── logger/
│ ├── net/
│ │ │── poller/
│ │ └── timer/
│ └── pool/
│ └── thread/
├── lib/
└── CMakeLists.txt- 网络编程库底层采用 Epoll + LT 模式的 I/O 复用模型,并且结合非阻塞 I/O 实现从 Reactor 模型,实现了高并发和高吞吐量
- 网络库采用了 one loop per therad 线程模型,并且向上封装线程池避免了线程的创建和销毁的性能开销,保证服务器的性能
- 使用 C++11 的新特性编写,对比 muduo 网络库,该网络库去除了对于 Boost 库的依赖,实现了更加轻量化的设计
- 网络库内部实现了一个小型的 HTTP 服务器,可支持 GET 请求和静态资源的访问,且附有异步日志监控服务端情况
- 采用 eventfd 作为事件通知描述符,通过 wakeup 机制巧妙的高效派发事件到其他线程执行异步任务
- 设计 Buffer 类,通过调用 readv API 减少系统调用次数,利用 buffer + extrabuf 设计提高访问速度,减少内存碎片
- 基于红黑树实现定时器的管理结构,内部使用 Linux 的 timerfd 通知到期任务,从而进行高效管理定时任务
- 操作系统:
Ubuntu 18.04.2 - 编译器:
g++ 7.5.0 - 编译器:
vscode - 版本控制:
git - 项目构建:
cmake 3.10.2
Reactor 模型:
muduo-Reactor 模型:
依次运行脚本,其会自动编译项目
# 编译项目,生成 *.so 文件
sudo ./autobuild.sh
# 统一将 include 头文件加入系统编译时自动搜索路径 /usr/include
# 统一将 *.so 动态库加入系统编译时自动搜索路径 /usr/lib
sudo ./copy.sh依次执行以下指令:
# 进入目录
cd /example/tcp/
# 执行 makefile
make
# 运行 testserver
./testserver
# 新建终端进行连接 (默认 ip = 127.0.0.1 prot = 8080)
nc 127.0.0.1 8080执行结果如下图:
依次执行以下指令:
# 进入目录
cd /example/http/
# 执行 makefile
make
# 运行 testserver
./testhttpserver进入 linux 自带浏览器,输入对应 127.0.0.1:9789 执行结果如下图:
MySQL 连接池
Memory 内存池
http 服务器
模块一:
模块二:
模块三:
模块四:



