逐步构建HTTP服务器(五)——Reactor模式
2021/10/6 23:11:11
本文主要是介绍逐步构建HTTP服务器(五)——Reactor模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
逐步构建HTTP服务器(五)——Reactor模式
如何深刻理解Reactor和Proactor?
Schmidt D C . Reactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events. 1999.
Reactor基本概念
这是Douglas C. Schmidt提出的Reactor中的主要的组成部分。
-
Handle:系统资源管理者,负责标识如网络连接、打开的文件等由系统管理的资源(在Linux上即为文件描述符)。
-
Synchronous Event Demultiplexer:多路复用器,主要使用多路复用函数负责阻塞线程直至有handle对应的事件就绪。
-
Initiation Dispatcher:分发器,定义注册、移除和分发Event Handlers的接口。
-
Event Handler:抽象的事件就绪处理者,定义Event就绪处理的回调函数的接口,由上级的应用来实现这个接口。
-
Concrete Event Handler:具体的事件就绪处理者,就是Event Handler的应用层级的实现。
Reactor一个典型时序图
- 初始化分发器Dispatcher
- 通过分发器Dispatcher的register_handler()函数向分发器注册事件处理者Event Handler
- 分发器Dispatcher通过事件处理者Event Handler的get_handle()获取系统资源管理者Handle(Linux中,Handle管理的就是文件描述符)
- 分发器Dispatcher使用多路复用函数阻塞线程,直至所有在分发器中注册了的Event Handler拥有的Handle中有对应的event_type就绪。
- 分发器Dispatcher根据就绪的Handle调用其对应的Event Handler的事件就绪处理回调函数handle_event()
适用于服务器的多线程 + Reactor模型
我们使用一个主Reactor负责网络套接字的连接,在这个主Reactor中我们使用一个Acceptor来分配已连接的套接字给其他线程的子Reactor(注意这里分配的Handler,即套接字,具体的分配动作是找一个其他线程的Reactor中的分发器Dispatcher注册Event handler;而Reactor中的分发器Dispatcher的分发的意思是将就绪的Handler分发给对用的Event Handler,具体的分发动作就是调用就绪的Handler对应的Event Handler的处理回调函数)。
多线程 + Reactor模型的具体实现
muduo中Reactor实现类图
-
EventLoop:对应分发器Initation Dispatcher
-
Poller:对应多路复用器Synchronous Event Demultiplexer
-
Socket + Channel + TcpConnection:对应Handler
-
Acceptor:对应Event Handler的实现
-
TcpServer:负责将新连接(Socket + Channel + TcpConnection)分配给其他线程的Event Loop
一个典型Echo服务器与客户端通信的流程
muduo 源码剖析
chenshuo/muduo: Event-driven network library for multi-threaded Linux server in C++11
这篇关于逐步构建HTTP服务器(五)——Reactor模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Vue新手入门教程:从零开始学习Vue框架
- 2024-11-23如何集成Ant Design Vue的图标
- 2024-11-23如何集成Ant Design Vue图标
- 2024-11-23使用vue CLI快速搭建Vue项目教程
- 2024-11-23Vue CLI多环境配置简单教程
- 2024-11-23Vue3入门教程:轻松搭建你的第一个Vue3应用
- 2024-11-23Vue3+Vite快速上手指南
- 2024-11-23Vue3阿里系UI组件入门指南
- 2024-11-23Vue3的阿里系UI组件入门指南
- 2024-11-23Vue3公共组件入门教程