其他分享
首页 > 其他分享> > 逐步构建HTTP服务器(五)——Reactor模式

逐步构建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中的主要的组成部分。

Reactor一个典型时序图

  1. 初始化分发器Dispatcher
  2. 通过分发器Dispatcher的register_handler()函数向分发器注册事件处理者Event Handler
  3. 分发器Dispatcher通过事件处理者Event Handler的get_handle()获取系统资源管理者Handle(Linux中,Handle管理的就是文件描述符)
  4. 分发器Dispatcher使用多路复用函数阻塞线程,直至所有在分发器中注册了的Event Handler拥有的Handle中有对应的event_type就绪。
  5. 分发器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实现类图

一个典型Echo服务器与客户端通信的流程

muduo 源码剖析

chenshuo/muduo: Event-driven network library for multi-threaded Linux server in C++11

标签:分发,HTTP,Reactor,Dispatcher,Handler,服务器,就绪,Event
来源: https://www.cnblogs.com/ithepug/p/15374533.html