Netty和Reactor设计模式

这篇具有很好参考价值的文章主要介绍了Netty和Reactor设计模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Netty

Netty和Reactor设计模式,spring,java,网络,设计模式,java,redis
Netty和Reactor设计模式,spring,java,网络,设计模式,java,redis
Netty一个线程通过多路复用,能够实现多个socket的非阻塞的调用。

Reactor

Reactor 模式是一种设计模式,也叫响应器模式。
以下是 Reactor 模式的基本组成部分:

  • 事件处理器(Event Handlers): 这些是实际处理特定类型事件的组件。它们通过注册到 Reactor 中来接收事件通知。
  • 事件分发器(Reactor): 这是一个中央调度器,负责监听各种事件并将其分发给相应的事件处理器。Reactor
    维护了一个事件处理器的注册表,以及与事件关联的回调函数。

  • 事件(Events): 这是在系统中发生的各种动作或状态变化,可能包括网络数据到达、定时器触发、用户输入等。

Reactor 模式的主要优势在于它能够处理大量并发请求而不需要为每个请求创建新的线程。
通过IO多路复用监听事件,收到事件后,根据事件类型分配给线程,Reactor 模式可以在一个单线程或者少数几个线程的情况下处理大量并发请求,提高系统的效率和性能。

Reactor的实现

Reactor 模式主要由 Reactor 和处理资源池这两个核心部分组成,它俩负责的事情如下:
Reactor 负责监听和分发事件,事件类型包含连接事件、读写事件等;
处理资源池负责处理事件,如(读请求事件 -> 处理请求事件 -> 发送响应);

3 个经典方案

  1. 单 Reactor 单线程;
  2. 单 Reactor 多线程;
  3. 多 Reactor 多线程;

单 Reactor 单进程 / 线程

Netty和Reactor设计模式,spring,java,网络,设计模式,java,redis
Reactor 对象通过 select (IO 多路复用接口) 监听事件,收到事件后通过 dispatch 进行分发,具体分发给 Acceptor 对象还是 Handler 对象,还要看收到的事件类型:

  • 如果是连接建立的事件,则交由 Acceptor 对象进行处理,Acceptor 对象会通过 accept 方法 获取连接,并创建一个 Handler 对象来处理后续的响应事件;
  • 如果不是连接建立事件, 则交由当前连接对应的 Handler 对象来进行响应;

单 Reactor 多线程

Netty和Reactor设计模式,spring,java,网络,设计模式,java,redis
上面的三个步骤和单 Reactor 单线程方案是一样的,接下来的步骤就开始不一样了:
Handler 对象不再负责业务处理,只负责数据的接收和发送,Handler 对象通过 read 读取到数据后,会将数据发给子线程 里的 Processor 对象进行业务处理;
子线程里的 Processor 对象就进行业务处理,处理完后,将结果发给主线程 中的 Handler 对象,接着由 Handler 通过 send 方法将响应结果发送给 client;
单 Reator 多线程的方案优势在于能够充分利用多核 CPU 的能,那既然引入多线程,那么自然就带来了多线程竞争资源的问题。
例如,子线程完成业务处理后,要把结果传递给主线程的 Reactor 进行发送,这里涉及共享数据的竞争。
要避免多线程由于竞争共享资源而导致数据错乱的问题,就需要在操作共享资源前加上互斥锁,以保证任意时间里只有一个线程在操作共享资源,待该线程操作完释放互斥锁后,其他线程才有机会操作共享数据。

多 Reactor 多线程

Netty和Reactor设计模式,spring,java,网络,设计模式,java,redis

主线程中的 MainReactor 对象通过 select 监控连接建立事件,收到事件后通过 Acceptor 对象中的 accept 获取连接,将新的连接分配给某个子线程;
子线程中的 SubReactor 对象将 MainReactor 对象分配的连接加入 select 继续进行监听,并创建一个 Handler 用于处理连接的响应事件。
如果有新的事件发生时,SubReactor 对象会调用当前连接对应的 Handler 对象来进行响应。
Handler 对象通过 read -> 业务处理 -> send 的流程来完成完整的业务流程。

————————————————
参考CSDN博主「attempt_to_do」
原文链接:https://blog.csdn.net/weixin_43021844/article/details/125045251文章来源地址https://www.toymoban.com/news/detail-812649.html

到了这里,关于Netty和Reactor设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 设计者模式以及与Spring关系(四) 代理模式

    目录 简介: 23设计者模式以及重点模式 代理模式(Proxy Pattern) 静态代理示例 spring中应用 动态代理 1.基于JDK的动态代理 target.getClass().getInterfaces()作用 内名内部类写法(更简洁,但不推荐) 2.基于CGLIB实现 spring中应用 本文是个系列一次会出两个设计者模式作用,如果有关联就三

    2024年01月23日
    浏览(49)
  • Netty Reactor 模式解析

    目录 Reactor 模式         具体流程 配置  初始化 NioEventLoop  ServerBootstrapAcceptor 分发 在刚学 Netty 的时候,我们肯定都很熟悉下面这张图,它就是单Reactor多线程模型。 在写Netty 服务端代码的时候,下面的代码时必不可少的,这是为什么呢?         在 Netty 里,EventLoopGroup

    2024年01月25日
    浏览(44)
  • java Spring中使用到的设计模式

    单例模式(Singleton Pattern)是java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接

    2024年02月16日
    浏览(63)
  • Java 设计者模式以及与Spring关系(七) 命令和迭代器模式

    本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。 23设计者模式以及重点模式 我们都知道 设计者模式 有 3 类 23 种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。 (1)创建

    2024年01月24日
    浏览(37)
  • Java 设计者模式以及与Spring关系(六) 装饰和模版方法模式

    本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。 23设计者模式以及重点模式 我们都知道 设计者模式 有 3 类 23 种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。 (1)创建

    2024年01月24日
    浏览(42)
  • spring的设计模式----简单工厂模式

    spring中IoC 控制反转,底层是工厂模式。 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式,可以将对象的

    2024年02月17日
    浏览(46)
  • 设计模式的分类及Spring中用到的设计模式

    在《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书中,提出了 23 种设计模式,通常称为 GoF(Gang of Four)设计模式。这些设计模式被分为以下三种类型: 创建型模式(Creational Patterns): 工厂方法模式(Factory Method Pattern) 抽象

    2024年02月22日
    浏览(43)
  • 设计模式_spring框架中常用的8种设计模式

    spring框架中常用到的8种设计模式清单如下: 设计模式 使用地方 备注 工厂模式 BeanFactory ApplicationContext 单例模式 Spring中的Bean 代理模式 Spring AOP java反射实现动态代理 模板方法模式 Spring中以Template结尾的类 使用继承的方式实现 观察者模式 Spring事件驱动模型 适配器模式 Spri

    2023年04月08日
    浏览(44)
  • 【Spring】Spring中的设计模式

    责任链模式介绍 Spring源码介绍 spring中Aop的责任链模式,相对于传统的责任链模式做了一定的改造。 传统的设计模式,抽象处理者会有一个方法设置和获取具体处理者的下一个处理者的方法。 如: 但是Spring中的责任链模式没有这两个方法,而是抽出一个公共的处理方法,方

    2024年02月14日
    浏览(41)
  • Spring中的设计模式

    目录 1.Spring中使用到的设计模式有: 2.工厂模式 3.单例模式 4.代理模式 5.模板模式 6.适配器模式         工厂模式:实现IoC容器         单例模式:将bean设置为单例         代理模式:AOP的底层实现         模板模式:比如引入jdbc依赖后出现的jdbcTemplate         适配器模

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包