初识Netty框架

article/2025/9/21 11:32:26

总体概述

Netty作为一款网络通信框架,底层封装了NIO。我们在使用Netty时,无需再关注NIO细节。下图为Netty处理流程图:
在这里插入图片描述
应用程序中使用Netty作为网络通信框架后,会形成一条PipeLine链,PipeLine链上有一个一个的事件处理器。当应用程序接收到网络数据,或者发送网络数据时,数据会经过PipeLine上的事件处理器,对数据进行处理,然后再将处理后的数据进行发送或者业务处理。

在这里插入图片描述
事件处理器可细分为入站处理器和出站处理器。入站表示接收网络数据到业务处理的过程。出站表示发送数据到网络的过程。当接收网络数据时,数据会经过入站处理器到达业务处理,当发送数据时,数据经过出站处理器进行处理。所以,入站处理器要进行一定的排序,出站处理器也需要一定的排序。而入站和出站之间的顺序,没有任何关系。
以上就是Netty的大体介绍。我们使用Netty,本质就是定义处理器以及数据的处理业务即可。而无需再关心NIO中注册连接,读写事件等操作。

Netty核心组件

Channel、EventLoop、EventLoopGroup

在这里插入图片描述
EventLoopGroup可以理解成线程池的作用,生产EventLoop实例。
EventLoop可以理解成一个线程,用于执行任务。
Channel可以理解成一个Socket。一个Channel对应一个EventLoop,而一个EventLoop可以对应多个Channel。Channel中的网络事件,由EventLoop这个线程来执行。
在这里插入图片描述
EventLoop是对Channel中数据的业务处理。而NIO中的Selector是对Channel中I/O事件的处理。EventLoop中维护了Channel的PileLine,来对Channel中数据执行一遍事件处理器链,进行数据业务操作。而Selector是对应用程序中所有channel,进行I/O事件的选择。比如Channel中数据通过EventLoop进行完成业务处理 后,能发送数据了,则Selector选择这个Channel,进行write操作发送数据。一个EventLoop对应一个selector。即一个线程对应一个selector。

Channel生命周期:
在这里插入图片描述
当Channel与远端建立连接后,状态就是Active状态,当断开连接后,切换为Inactive状态,然后与EventLoop解绑,切换为Unregistered状态。每个状体切换,都会触发一个事件,我们可以在Handler里定义事件处理器,去进行一些业务操作。

ChannelHandler、ChannelPileLine

从应用程序开发而言,Netty的主要组件是ChannelHandler。它充当了所有入站和出站数据的应用程序逻辑的地方。
在这里插入图片描述
ChannelHandler是一个接口,其下面分为InboundHandler入站处理器和OutBoundHandler出站处理器。netty使用适配器模式,可以继承Adapter类,来实现我们自己感兴趣的方法,而不是全部方法。
SimpleChannelInboundHandler研究:自动释放Buffer资源,避免内存泄漏。避免内存泄漏的法则是在ChannelHandler链中,要么数据向后传递,后面还有Handler处理数据,要么就在最后一个处理的Handler上释放内存。

一个channel在创建时,就会创建一个ChannelPileLine对象。在ChannelPileLine中,存放ChannelHandler链。一个ChannelHandler对象,允许放在不同的Channel中的ChannelPileLIne中。但是需要加上@sharable注解,告诉netty要共用这个ChannelHandler对象。这样的话会产生线程安全问题。

ByteBuf

Netty封装了NIO的ByteBuffer,定义了ByteBuf类。
在这里插入图片描述

编码器解码器

Netty提供了http协议编码器,解码器,https协议编码器,解码器。websocket编码器,解码器。
有了解码器以后,我们的服务就可以接收这些协议的数据了,netty解码器自己去解析协议数据,供我们拿到业务数据。例如,如果我们的服务想接收mqtt协议,完全可以用netty的mqtt解码器去接收数据,然后解析,就无需引入第三方mqtt服务器了。


http://chatgpt.dhexx.cn/article/w0IhJfgA.shtml

相关文章

【java网络编程】netty框架

一、简介 netty是一个高性能、异步事件驱动的NIO框架,它基于Java Nio提供的API实现,提供了对TCP、UDP和文件传输的支持。 二、Reactor模型 Reactor是一种并发处理客户端请求响应的事件驱动模型。服务端在接收到客户端请求后采用多路复用策略&#xff0…

Netty学习二:Netty整体框架

一、Netty的整体结构和源码结构 1. Core层 提供底层网络通信的通用抽象和实现,包括可扩展的事件模型、通用的通信API和支持零拷贝的ByteBuf等。 common模块是Netty的核心基础包,提供丰富的工具类,其他模块都需要依赖该模块。常用的包括&…

Netty框架

概述 Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty 是一个基于 NIO 的网络编程框架,使用 Netty 可以帮助你快速、简单的开发出一个网络应用&…

Netty框架基本介绍

NIO 1.概述:NIO全称java non-blocking IO ,是指JDK1.4开始,java提供了一系列改进的输入/输出的新特性,被统称为NIO(即New IO )。新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对j…

超详细Netty入门,看这篇就够了!

思维导图 前言 本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。 一、Netty概述 官方的介绍: Netty is an asynchronous event-drive…

SPI通信协议详解(一)

SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。 时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样。 产生时钟的一侧称为主机,另一侧称为从机。总是只有一个…

SPI协议的介绍

学习内容: 学习SPI协议记录 学习清单: 提示:这里可以添加要学的内容 例如: SPI协议的介绍三根线还是四根线两个概念四种模式SPI时序图SPI优缺点SPI和IIC的对比 学习详细内容: 1.SPI协议的介绍 SPI是串口外设接口…

SPI 通信协议

文章目录 【 1. 概述 】【 2. 原理 】1. 全双工特征下的传输特点2. 二线式、三线式的SPI3. SPI 模式CPOL(Clock Polarity),时钟极性CPHA (Clock Phase),时钟相位通信模式_时序 4. 通信过程5. 底层数据传输演示 【 3. SPI底层驱动 】 【 1. 概述 】 SPI …

SPI通信协议基础

文章目录 引言正文串行与并行通信SPI通信简介SPI如何运作?时钟从机选择多个从机MOSI和MISOSPI数据传输步骤 SPI的优缺点优点缺点 好文推荐参考 引言 当您将微控制器连接到传感器,显示器或其他模块时,您是否考虑过这两种设备如何相互通信&…

SPI、I2C、UART(即串口)三种串行总线详解

以下内容均来源于网络资源的学习与整理,如有侵权请告知删除。 参考博客 几个串口协议学习整理 UART IIC SPI_mainn的博客-CSDN博客 SPI、I2C、UART三种串行总线的原理、区别及应用_嵌入式Linux,的博客-CSDN博客 RS-232 和 UART 之间有什么区别? - 知乎…

uart、spi、i2c通信协议详解

文章目录 前言一、uart(串口)介绍使用rs232、rs485拓展 二、I2C介绍1.宏观流程2.时序上3.典型操作 三、spi(串行外设接口)介绍使用1.宏观上2.微观上 总结1.i2c和spi对比 前言 之前对于各种通信协议学习了就忘,学了就忘…

普通GPIO模拟SPI通信协议(软件SPI)

在工作中偶尔会遇到SPI不够用的情况,而我们又要去使用SPI通信协议,此时就需要我们自己去模拟SPI通信协议。我们知道SPI通信协议有四种模式,它们分别如下所示: 下面是我基于ATSAM4SD16B芯片在Atmel Studio上用普通GPIO模拟的SPI…

SPI 协议

一. 概念 1. 通常SPI通信要求4根线,分别是MOSI(mast output salve input), MISO, CLK, CS。 2. 当发送和接受数据的工作都准备好了,只要有时钟CLK,就发送数据,没有时钟就不发送,而且一个时钟周期发送一位(bit)数据,所…

SPI通信协议(SPI总线)学习

转载自:https://www.cnblogs.com/deng-tao/p/6004280.html 1、什么是SPI? SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总…

SPI通信

1 SPI的简介及基本特点 1 SPI的简单介绍 最近工作中使用了SPI通信方式来做TM4C129和STM32之间的通信,为了更好地解决问题就学习了SPI原理的相关内容,完成了项目之后,也对这种通信方式有了较为深入的了解,现在来对SPI的使用方法进…

详解SPI通信协议

一、SPI简介 SPI,即Serial Peripheral Interface的英文缩写。从字面意思看就是串行外部设备接口,是一种全双工、高速、同步的通信总线。 SPI最早是摩托罗拉公司开发的全双工同步串行总线,用于微控制器(MCU)连接外部设…

stm32中常见的通信协议之SPI

目录 1.SPI总线2.SPI的寻址方式3.SPI的工作原理总结4.SPI的通讯过程5.SPI的极性和相位6.IIC和SPI的异同7.stm32中SPI配置中常用的寄存器8.stm32中相关库函数 1.SPI总线 SPI是串行外设接口的缩写,SPI是一种高速的、全双工、同步的串行通信协议;SPI采用主…

【通信协议】一文搞懂SPI

SPI总线简介 SPI(Serial Peripheral Interface)是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。 接口定义 SPI接口共有4根信号线,分别是:片选信号、时钟信号、串行输出信号、串行…

SPI 通信协议 最详细解读!!!

SPI(Serial Peripheral Interface,串行外围接口)是一种高速、全双工、同步的通信总线,主要应用在EEPROM、FLASH、实时时钟、AD转换器上,以及数字信号处理器和数字信号解码器之间。 信号线 SPI有四根信号线:…

SPI 通信协议详解

SPI通信协议详解 写在最前: 本文讲述了SPI通信协议的基本内容包括如下 SPI的基础知识SPI的读写时序 本文重点参考 英文维基百科 中文维基百科 百度百科 注意: 倘若读者有足够的耐心和英文水平,强烈建议自行去英文维基百科去阅读相关知识。 相关链接: SPI…