该项目是基于陈硕的Muduo库 进行仿写以及优化,基于Linux系统、C++、网络编程
该项目的代码仓:
git clone https://gitee.com/chang-jj/Reactor-Network-Communication-Framework.git
代码也在持续更新中......
学习阶段
1.高性能服务器框架 TCP
2.支持应用层协议:HTTP
3通过自定制协议 实现RPC(Remote Procedure Call)通信框架
-
协议----->网络通信中客户端和服务器端之间的数据格式约定
-
知名协议
-
自定制协议------>自定义数据格式约定
-
RPC
框架设计
1.Reactor模型
-
反应堆模型(直译),事件驱动模型(原理),事件循环模型(实现机制)
-
epoll+事件分发
2.核心特性
-
被动反应:不像主动轮询,而是等待事件发生然后反应
-
链式反应:一个事件可能触发一系列的后续处理
-
能量集中:少量线程处理大量连接,像反应堆高效产生能量
-
控制中心:像核反应堆的控制系统统一调度所有事件
3.reactor网络通信模型的演化
单reactor模型

单线程处理达到性能瓶颈
单reactor+线程池模型

单线程------>epoll监听多个文件描述符
- 数据的收发------>性能瓶颈
业务处理模块----->线程池处理
主从Reactor

4.与其他相关模型的对比
| 模型 | Reactor(反应堆模型) | Proactor(前摄器模型) |
|---|---|---|
| IO 类型 | 同步 IO,事件就绪处理 | 异步 IO,操作完回调 |
| read/write | 应用做 | 内核做 |
| 通知时机 | 可读/可写 | IO完成 |
| epoll | Reactor | 不是真异步 |
| Windows IOCP | ❌ | ✅ |
Proactor模型:

-
前摄器模型,主动模式
-
核心思想:
-
应用程序发起异步I/O操作,然后继续执行其他任务,当I/O操作完成时,操作系统会通知应用程序,应用程序再处理相应的业务逻辑
-
Reactor:"当I/O就绪通知我,我来读写操作"
-
Proactor:"我告诉你我要读什么,你帮我做完后通知我结果"'
-
-
-
核心特点:
-
异步IO:应用程序调用异步IO操作,由操作系统负责执行I/O,应用程序不阻塞等待
-
完成通知:I/O操作完成后,操作系统主动通知应用程序
-
分离关注点:应用程序的I/O操作和事件分离,由操作系统负责I/O操作,应用程序负责业务处理
-
I/O操作:
-
发起IO调用
-
等待IO就绪
-
拷贝数据(内核数据拷贝到buff)
-
IO调用返回
同步和异步区别
-
事情由谁执行
-
结果获取方式
-
同步:主动等待结果
-
异步:结果完成后被通知
- 异步IO:进程发起IO调用,IO调用+数据拷贝过程系统完成,IO完成后通知进程
-
CPU_Kernel

概要设计
模块设计
-
reactor :负责事件循环监控及分发功能。
-
Poller描述符监控模块:封装epoll,负责描述符的事件监控与事件分发。
-
Eventloop事件循环模块 :负责实现Poller事件循环监控+任务池实现连接的线程安全操作。
-
LoopThread模块:负责实现Eventloop与对应线程thread封装在⼀起。
-
单一职责原则------>一个类只负责一个功能
-
Weakup事件循环唤醒模块:负责Poller的阻塞唤醒事件描述符的读事件处理(muduo中没
有)
-
-
LoopThreadPool模块:负责实现池化LoopThread功能。
-
-
handler :负责描述符的监控事件描述以及事件处理
-
Channel事件处理器模块:负责描述描述符的监控事件以及事件处理
-
TimerQueue定时器模块:负责实现定时器中定时器描述符的读事件处理
-
Timestamp时间操作模块:负责简单的系统⽇期时间操作
-
Timer定时任务模块:负责描述⼀个定时任务(过期时间,是否重复,过期回调,...)
-
TimerId模块:与定时任务Timer对应的定时任务ID(唯⼀序号,定时任务指针)
-
-
Acceptor监听对象模块:负责监听套接字的读事件处理
-
**Connection连接对象模块:**负责I/O套接字的读写事件处理。
-
Buffer模块:负责实现发送/接收数据缓冲区
-
Sockets模块:负责套接字的各项基础操作
-
-
-
逻辑整合:
-
TcpServer服务器模块:负责基于以上模块整合实现服务端
-
TcpClient客⼾端模块:负责基于以上模块整合实现客⼾端
-
关系图:

