Reactor-反应器模式
Reactor模式:反应器模式,是高性能网络服务器中最为常用的一种模式,libevent,muduo,libuv等网络库都是以
Reactor模式构建。Reactor模式由同步事件多路分解器和具体事件处理程序组成,同步事件多路分解器一般都是
由操作系统支持,如支持IO复用的select,epoll,poll等,通过监听IO事件集合,根据事件类型将具体事件交由具体
事件处理程序来处理,从而达到结构模块化的处理。总之Reactor是很多高性能网络架构的基础,需要我们开发者
重点学习。
下面是Reactor模式的类图:
以select作为同步事件多路分解器为例:
Reactor handle_events 使用select监听一组套接字,由Event Handler封装套接字和事件组。
场景、客户端套接字连接服务器,向服务器发送一条数据,并接受回显这条数据。
1) 服务器调用register_handler注册accept的Listen套接字
2) 服务器调用handle_events进入事件循环
3) 调用select以处理客户端的登录连接请求
4) 客户端connect连接到服务器
5) 服务器select监听到客户端的连接事件到来,调用事件处理函数handle_event处理新连接的socket
6) 创建新的socket,并将socket Event handle register到 Reactor,并指定socket Event handle当有读事件发生时,通知它
7) 客户端发送一段字符串到服务器,同步事件多路分解器调用handle_events监听到有读事件到来,通知socket Event handle接受数据
8) 数据接受完成后,向socket Event handler register到 Reactor,并指定socket Event handle当有写事件发生时,通知它
9) 客户端调用recv函数回显接受数据
10)服务器同步事件多路分解器调用handle_events监听到有写事件到来,通知socket Event handle 发送之前接受到的数据。
11) 客户端收到数据显示
Reactor-反应器模式的更多相关文章
- Reactor反应器模式 (epoll)
1. 背景 最近在看redis源码,主体流程看完了. 在网上看到了reactor模式,看了一下,其实我们经常使用这种模式. 2. 什么是reactor模式 反应器设计模式(Reactor patter ...
- 高性能IO —— Reactor(反应器)模式
讲到高性能IO绕不开Reactor模式,它是大多数IO相关组件如Netty.Redis在使用的IO模式, 为什么需要这种模式,它是如何设计来解决高性能并发的呢? 最最原始的网络编程思路就是服务器用一个 ...
- 什么是Reactor模式,或者叫反应器模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- Reactor模式,或者叫反应器模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- Reactor模式(反应器模式)
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- Reactor模式,或者叫反应器模式 - 为什么用多路io复用提供吞吐量
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- 【转载】Reactor模式,或者叫反应器模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- 反应器模式 vs 观察者模式
反应器模式(Reactor pattern)与观察者模式(Observer pattern) 反应器模式 是一种为处理服务请求并发提交到一个或者多个服务处理程序的事件设计模式.当请求抵达后,服务处理程 ...
- 反应器模式 vs 生产者消费者模式
相似点: 从结构上,反应器模式有点类似生产者消费者模式,即有一个或多个生产者将事件放入一个Queue中,而一个或多个消费者主动的从这个Queue中Poll事件来处理: 不同点: Reactor模式则并 ...
- Reactor构架模式
http://www.cnblogs.com/hzbook/archive/2012/07/19/2599698.html Reactor框架是ACE各个框架中最基础的一个框架,其他框架都或多或少地用 ...
随机推荐
- CF781D Axel and Marston in Bitland [倍增 矩阵乘法 bitset]
Axel and Marston in Bitland 好开心第一次补$F$题虽然是$Div.2$ 题意: 一个有向图,每条边是$0$或$1$,要求按如下规则构造一个序列然后走: 第一个是$0$,每次 ...
- js小知识点
1.setTimeout(function(num){ alert(num);},1000,123); 第三个参数为实参. 2.拼接字符串: document.body.innerHTML = '&l ...
- 百度地图、高德地图、Google地图等坐标系相关梳理
1.地理坐标系与投影坐标系 地理坐标系也就是球面坐标系,是将本不是椭球体的地球进行椭球体化,从而形成球面坐标体系,国际标准的地理坐标系就是WGS-84坐标系: 只不过各个国家为了反映该国家所在区域地球 ...
- Linux 常用命令 (common commands for linux)
Linux 常用命令 (Common Commands For Linux) 1.声明,此文章仅写基于 Bash shell 常用的命令,如果遇上命令在使用过程中提示没有,可能随着更新,命令也被替换掉 ...
- js短路表达式
今天碰见个题目,感觉短路表达式很好用. 题目: 定义一个计算圆面积的函数area_of_circle(),它有两个参数: r: 表示圆的半径: pi: 表示π的值,如果不传,则默认3.14 funct ...
- 为Docker配置阿里加速器,系统为Debian8
先停止docker服务 service docker stop 设置阿里加速器 dockerd --registry-mirror=https://063eurcd.mirror.aliyuncs.c ...
- NIO下_使用示例
一.分散与聚集 1.分散读取(Scattering Reads):将通道中的数据分散到多个缓冲区中 2.聚集写入(Gathering Writes):将多个缓冲区中的数据聚集到通道中 public v ...
- Python 中的闭包
通常来说,函数中的局部变量在函数调用结束的时候不能再被引用,所分配的空间也会被回收. 但是通过闭包这种技术,函数调用结束了,它的局部变量的值还可以保存在闭包里. 试举一例: def make_adde ...
- object类的equals方法简介 & String类重写equals方法
object类中equals方法源码如下所示 public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接 ...
- springMvc学习笔记一
什么是springmvc springmvc就是spring框架的一个模块 所以springmvc与spring之间无需通过中间整合层进行整合的. springmvc又是基于mvc的web框架 mv ...