Reactor-Netty基本抽象类介绍
发布网友
发布时间:2024-09-27 07:11
我来回答
共1个回答
热心网友
时间:2024-10-05 21:13
概述
之前已经把reactor3看的差不多了,在学会webflux之前还需要了解Reactor-Netty的相关知识,然后才能看懂webflux,然后才能看懂Gateway.
LoopResource
首先先学习几个基本的类才能看懂Reactor-Netty在干什么.我们先来看LoopResource类.官方说这个类是一个EventLoopGroup 的 selector并且关联了 Channel的工厂
* An {@link EventLoopGroup} selector with associated* {@link io.netty.channel.Channel} factories.
我们来看一下LoopResource提供的一些方法
static LoopResources create(String prefix) { if (Objects.requireNonNull(prefix, "prefix").isEmpty()) {throw new IllegalArgumentException("Cannot use empty prefix"); } return new DefaultLoopResources(prefix, DEFAULT_IO_SELECT_COUNT, DEFAULT_IO_WORKER_COUNT, true);}
我们来看看DefaultLoopResource内部实现
其实内部就是缓存了一堆的EventLoopGroup
ChannelPipelineConfigurer
这个类的作用就是Channel创建好之后,在读取数据之前的初始化工作,我们看几个实现类 HttpServerChannelInitializer
ChannelGroup
官方解释: 一个线程安全的集合,里面装的是打开的Channel,并且提供了很多操作Channel的方法,关闭的Channel会自动被group剔除.一个Channel可以属于多个Group
先来看看唯一一个实现类DefaultChannelGroup的源码
可以看到内部就是两个Map维护服务端和客户端的Channel,然后还有一个*.接下来看看添加Channel的方法再来看看是如何自动把过期Channel移除的,channel关闭之后会出发listener,listener会调用remove方法
其实就是很简单的从map中移除数据的逻辑
ConnectionObserver
从字面上看就是连接的观察者.是一个Connection的生命周期观察器.核心方法是 onStateChange.子类很多,等看源码的时候看到具体的再看源码.我们先来看ConnectionObserver定义的几个状态
TransportConfig
一个配置的抽象类,里面保存了一些属性
我们上面介绍的那些类都被保存在了这个Config里面.来看看其中一些比较重要的子类
ServerTransportConfig
可以看到这个子类里面提供了两个ConnectionObserver我们分别来看一看
ServerTransportDoOnconnectionServerTransportDoOn原文:https://juejin.cn/post/7112696590007009294
Reactor-Netty基本抽象类介绍
ConnectionObserver从字面上看就是连接的观察者.是一个Connection的生命周期观察器.核心方法是 onStateChange.子类很多,等看源码的时候看到具体的再看源码.我们先来看ConnectionObserver定义的几个状态 TransportConfig一个配置的抽象类,里面保存了一些属性 我们上面介绍的那些类都被保存在了这个Config里面.来看...
netty高性能架构之reactor模式是什么?
Reactor模式由Reactor和处理资源池组成,Reactor负责事件监听与分配,资源池则负责事件处理。其实现看似简单,但在不同业务场景下的具体实现方案却灵活多变,主要取决于对“多Reactor单进程”与“单Reactor单进程”两种模式的选择。根据业务需求与技术栈,Reactor模式可以采用不同的实现方式,如Java中通常采用线...
Netty的Reactor多线程模型,NioEventLoop,ChannelPipeline简介_百度知...
Channel,通道,为了便于理解,我把它分为 三类 Reactor多线程模型可以分为三块 mainReactor负责客户端接入 acceptor负责将接入的连接移交给subReactor subReactor负责连接的读写 关键知识:运行流程图 关键知识:ChannelPipeline的设计思想是 责任链设计模式 ,是由ChannelHandlerContext组成的 双向链表 , ,首尾固定...
【Netty系列_1】Netty简介与I/O&线程模型
Netty的优势在于其高效和灵活的架构。它涵盖了重要的知识点,包括I/O模型。在Unix系统中,有五种I/O模型,包括recvfrom系统函数的介绍,以及阻塞式、非阻塞式、I/O复用、信号驱动和异步I/O等。理解这些模型对比,对于理解Netty至关重要。接下来是线程模型,它是理解Netty运作的关键。常见的线程模型有经...
Netty系列教程(三)Netty组件之EventLoopGroup
线程模型是Netty框架的核心,它对框架的性能、并发量和安全性等架构质量有重要影响。Netty精心设计的线程模型不仅提升了并发性能,还减少了锁的使用,实现了局部无锁化设计。因此,本文将深入探讨Netty的线程模型,揭示其如何设计以支持高并发和高性能。Reactor线程模型是Netty采用的优化线程模型,它针对传统的...
[Netty原理解析-1]-创建Java客户端和服务端,连接Netty (然后逐步分 ...
在Netty的Reactor模型中,服务端通过NioServerSocketChannel接收客户端连接,并将这些连接分发给NioEventLoopGroup的worker线程处理I/O操作。每个NioEventLoopGroup的线程数通常为CPU核心数的两倍,以实现负载均衡。服务端的核心代码包括bossGroup和workerGroup,前者负责接收连接,后者负责实际处理。当连接增多时,...
第6章 Reactor Netty中的消息处理逻辑 01
在理解Reactor Netty中如何利用ChannelOperationsHandler进行通信的基础上,我们重点分析了ConnectionObserver与channelOperation的相互配合。特别地,我们探讨了ConnectionObserver如何在服务器端通过其onStateChange方法,根据不同的ConnectionObserver.State状态对Channel执行相应操作。以PooledConnectionProvider#acquire的...
Netty的整体架构是怎样的?
Bootstrap 是“引导”的意思,它主要负责整个 Netty 程序的启动、初始化、服务器连接等过程,它相当于一条主线,串联了 Netty 的其他核心组件。 Netty 中的引导器共分为两种类型:一个为用于客户端引导的 Bootstrap,另一个为用于服务端引导的 ServerBootStrap,它们都继承自抽象类 AbstractBootstrap。 Bootstrap 和 Ser...
Netty网络编程框架的核心概念以及入门案例
EventLoop内部持有NIO中的Selector,Channel将会注册到EventLoop中,一个EventLoop可以监听多个Channel,EventLoop是实现IO多路复用的核心,可以看作是Reactor模型中的mainReactor。 Channel为Netty网络操作抽象类,EventLoop负责监听注册到其上的Channel的IO事件,两者配合完成I/O操作。2.3ChannelFuture 在Netty中所有的IO操作都是...
Netty入门 -- 什么是Netty?
Netty的身影广泛出现在互联网、大数据、游戏和通信等众多领域,例如业界知名开源组件正是基于它的强大性能。它的工作原理基于主从Reactor模式,BossGroup负责监听连接,WorkerGroup则负责事件处理。通过pipeline,Handler负责具体操作,如接收和发送数据。入门实例中,我们看到一个TCP服务器,它监听6668端口,接收"...