Netty体系结构

【Netty系列】Netty高性能架构设计以及光速入门 关于这个问题,我贴一段官网的阐述:大概意思是:Netty 是一个 NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议。具体来说,Netty就是对于Java NIO 的封装。 阅读详情

目录

简介

基础组件

一、Channel

二、ChannelFuture

三、回调

四、事件

五、ChannelHandler

六、EventLoop

非阻塞IO线程模型 

阻塞IO线程模型 

接口继承关系 

七、ChannelPipeline

八、ChannelHandlerContext

九、引导

Bootstrap

ServerBootstrap 

知识点

十、ByteBuf

关系整合

内置传输

NIO

OIO

支持的协议 

其它


简介

1、非阻塞、异步

基础组件

一、Channel

传入和传出数据的载体,是线程安全的

二、ChannelFuture

所有属于同一个Channel的操作都被保证其将以它们被调用的顺序被执行

三、回调

四、事件

事件/任务是按照先进先出(FIFO)的顺序执行的,从而保证了字节内容按正确顺序处理。

五、ChannelHandler

  • 事件的回调,实现了应用程序用于处理状态变化以及事件处理的逻辑。
  • 处理入站和出站数据应用程序逻辑
  • ChannelHandler可以属于多个ChannelPipeline,但是要用@Sharable标签标记,ChannelHandler必须是线程安全的。

六、EventLoop

会为每个 Channel 分配一个 EventLoop,用以处理连接生命周期所发生的事情。

  • 一个 EventLoopGroup 包含一个或者多个 EventLoop
  • 一个 EventLoop 在它的生命周期内只和一个Thread绑定
  • 所有由EventLoop处理的io事件都将在它专有的Thread上被处理
  • 一个channel在它的生命周期内只注册于一个EventLoop
  • 一个EventLoop可能会被分配给一个或多个Channel

非阻塞IO线程模型 

阻塞IO线程模型 

接口继承关系 

七、ChannelPipeline

提供了 ChannelHandler 链的容器,并定义了用于在入站和出站事件流的API

ChannelHandler 安装到 ChannelPipeline 中的过程

  • 一个ChannelInitializer的实现被注册到了ServerBootstrap中
  • 当ChannelInitializer.initChannel方法被调用时,ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler;
  • ChannelInitializer将它自己从ChannelPipeline中移除

每一个新创建的Channel都会被分配一个新的ChannelPipeline ,不能附加另一个ChannelPipeline也不能分离当前的。

阻塞方法使用DefaultEventExecutorGroup

八、ChannelHandlerContext

  • 代表ChannelHandler和ChannelPipeline之间的绑定,且永远不会改变,所以缓存对ChannelHandlerContext的引用是安全的。
  • 用于 将事件从一个ChannelHandler传递到下一个ChannelHandler,主要还是被用于写出站数据。
  • 每当有ChannelHandler添加到ChannelPipeline中时都会创建ChannelHandlerContext。
  • 产生更短的事件流(调用的方法只会传递到下一个ChannelHandler),所以可以通过提升性能

 

九、引导

Bootstrap

 

ServerBootstrap 

从Channel引导客户端

 ChannelOption

知识点

  1. 如果使用多个ChannelHandler,请使用ChannelInitializer,ChannelInitializer 可以向ChannelPipeline动态添加handeler;ChannelInitializer<Channel/SocketChannel>
  2. bossGroup, 用于处理客户端的连接请求; 另一个是 workerGroup, 用于处理与各个客户端连接的 IO 操作.
  3. 引导DatagramChannel,无连接协议不动用connent()只调用bind()
  4. 将ChannelOption用于引导,从而用于Channel
  5. AttributeMap<Channel,引导>
  6. AttributeKey:插入或获取属性值的泛型类
  7. 关闭:记得关闭EventLoopGroup,shutdownGracefully()该方法是异步的。

十、ByteBuf

1、堆缓冲区、直接缓冲区、复合缓冲区

2、索引

  1. get*操作不会移动readerIndex
  2. 任何read和skip开头的操作会检索或跳过位于当前readerIndex的数据,并增加已读字节
  3. readBytes(ByteBuf dest)该目标的缓冲区的writerIndex将被增加;
  4. clear()方法将 readerIndex 和 writerIndex 设为 0,但不会清除内存中的内容。
  5. clear()比 discardReadBytes()轻量,discardReadBytes可以丢弃已读字节回收空间。
  6. 查找:forEachByte(ByteBufProcessor.FIND_NUL);indexOf();
  7. 派生缓冲区(非独立副本):slice(int, int) Unpooled.unmodifiableBuffer(…) order(ByteOrder) readSlice(int) duplicate() slice();
  8. 独立副本使用:copy()
  9. ByteBufHolder:缓冲区池化,用于存储属性值;
  10. PooledByteBufAllocator:池化,减少内存碎片
  11. UnpooledByteBufAllocator:返回新的ByteBuf实例
  12. Unpooled:静态方法获得未池化的ByteBuf
  13. ByteBufUtil:静态方法hexdump()和equal方法等

关系整合

 

内置传输

NIO

OIO

支持的协议 

其它

出站:客户端到服务端

入站:服务端到客户端

ReferenceCountUtil.release(msg);释放消息

Netty实战(一)Nett的概念及体系结构 Netty是由JBOSS提供的一个java开源框架,它提供异步的、事件驱动的网络应用程序框架和工具。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。 阅读详情

相关推荐

Netty实战学习笔记(一)——Netty的概念及体系结构

JAVA早期的Socket JAVA早期只支持由本地系统套接字库提供的所谓的阻塞函数。 socket通信的基本过程如图: 在服务端,注册服务对某个端口进行监听,然后使用阻塞的accept()函数,来取出请求队列中的socket,或者一直等待,直到收到客户端的请求。连接建立后,服务端接受输入流进行处理,返回结果给客户端。最后通信结束,双方断开连接。 这样的过程每次只能处理一个连接,如果要

在梅边的专栏 7111

这可能是目前最透彻的Netty原理架构解析

转载自:https://www.toutiao.com/i6620280257846968840/?tt_from=weixin&amp;utm_campaign=client_share&amp;wxshare_count=1&amp;timestamp=1541492178&amp;app=news_article&amp;utm_source=weixin&amp;iid=489482591...

guying4875的专栏 7171

「深入浅出Netty」不愧是阿里架构师,这篇Netty实战文档太实用

前言 什么是Netty? Netty是由JBOSS提供的一个java开源框架。 Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty是一个基于NIO的客户,服务器端编程框架,使用Netty可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。 作为当前最流行的NIO框架,Netty在互联...

zhuguanghalo的博客 2358

Netty架构

BootStrap 和 ServerBootStrap 分别负责客户端和服务端的启动,它们是非常强大的辅助工具类,串联了 Netty 的系列核心组件;Channel 是网络通信的载体,提供了与底层 Socket 交互的能力。

qq_16803227的博客 984

深入AOSP构建系统:从BUILD_FINGERPRINT的生成逻辑,看如何定制你的Android设备标识

本文深入解析AOSP构建系统中的设备指纹生成机制,详细介绍了BUILD_FINGERPRINT的生成逻辑及其在Android设备中的关键作用。通过分析多个指纹属性的区别与联系,以及如何定制设备标识,帮助开发者更好地理解和掌握Android系统构建过程。

weixin_27017211的博客 217

TC397 EB配置ADC软件触发:从零实现周期采样与中断处理

本文详细介绍了如何在Infineon AURIX TC397芯片上使用EB Tresos工具配置ADC软件触发,实现周期采样与中断处理。通过硬件连接、EB模块配置、代码初始化及数据处理的全流程解析,帮助开发者快速掌握ADC软件触发技术,提升嵌入式系统开发效率。

root9的博客 231

netty系列之:netty架构概述

工具与资源中心 帮助开发者更加高效的工作,提供围绕开发者全生命周期的工具与资源 https://developer.aliyun.com/tool?spm=a1z389.11499242.0.0.65452413R1MRKF&utm_content=g_1000283979 简介 Netty为什么这么优秀,它在JDK本身的NIO基础上又做了什么改进呢?它的架构和工作流程如何呢?请走进今天的netty系列文章之:netty架构概述。 netty架构图 netty的主要作用就是提供一..

m0_60028455的博客 818

1.3 重叠因子:希尔伯特变换趋势线(Hilbert Transform - Instantaneous Trendline)概念与Python实战

希尔伯特变换趋势线(Hilbert Transform - Instantaneous Trendline)是一种基于希尔伯特变换的高级技术分析工具。它使用数字信号处理技术来识别价格的主导周期,并生成一条平滑的趋势线。这种方法可以有效过滤市场噪音,提供更准确的趋势信号。

Kewin的博客 2085

Netty剖析 - 掌握Netty 整体架构脉络

除了主流协议外,Netty还支持开发者自定义应用层协议。这意味着开发者可以根据自己的需求定义和实现特定的应用层协议,并在Netty的支持下进行编解码,从而实现定制化的网络通信。

小工匠 7501

MAPLAB X IDE仿真调试

一、开发环境 操作系统:Windows 10 调试工具:Pickit3 单片机型号:PIC24FJ32GA002 二、操作步骤 1、连接Pickit3仿真器于单片机对应的烧写口如图示: 2、点击调试项目进入调试模式,这时底下输出框显示"运行"代表成功进入调试模式。 3、选择断点,该IDE只支持两个断点,使用超过两个时,超过的断点亮灰色代表无效。设置好断点后需暂停然后再重新点击运行才能生效。可以看到在断点处有绿色光标。 ...

RealHero的博客 5084

深入剖析:NAND Flash与SD NAND(贴片式SD卡)存储扇区分配表架构差异与优化策略

本文深入探讨了NAND Flash与SD NAND(贴片式SD卡)在存储技术中的架构差异及其优化策略。NAND Flash作为非易失性存储器,依赖主控芯片进行坏块管理和磨损均衡,而SD NAND则通过内置控制器和标准文件系统(如FAT)简化了存储管理。两者在写入性能、容量扩展和可靠性方面各有优劣,NAND Flash需通过磨损均衡和写入合并优化性能,而SD NAND则通过高容量和高速传输提升效率。文章为嵌入式系统开发者和硬件工程师提供了关于如何根据需求选择并优化存储介质的参考。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1238

Netty 框架概述与体系结构

本文知识点: Netty框架的作用 Netty框架体系结构 Netty框架Channel、ChannelHandler、Future、事件详解 前言 Netty框架是什么?Netty是一款用于快速开发高性能的网络应用程序的Java框架。它封装了网络编程的复杂性,使网络编程和Web技术的最新进展能够被 比以往更广泛的开发人员接触到。它不只是一个接口和类的集合,还定义了一种架构模型和一套丰富的设计模式。通过Netty框架开发人员可以编写更高效的、可复用的、可维护的代码。 Netty 体系结构 使用Net

码农杰森 556

用Keil5给CH552G编程:手把手配置8051开发环境+LED闪烁实战

本文详细介绍了如何使用Keil5为CH552G单片机配置8051开发环境,并完成LED闪烁实战。从获取必要软件、安装WCH器件库到创建工程、编写程序及烧录,手把手指导开发者避开常见陷阱,特别适合从STC转向CH552G的开发者。

weixin_30733003的博客 539

Netty学习(一)Netty的概念及体系结构

前言 一系列文章旨在把我学习Netty以及使用Netty的一些经验分享出来,希望能帮助到对Netty感兴趣或正要上手的同学们。如果发现我述说得有问题,希望大家能指出讨论,非常感谢。 引导 首先我们要提出几个问题,大家一起思考,然后再通过文章来加深理解。 什么是Netty Netty的诞生是为了解决什么问题 Netty的核心组件有哪些 什么是Netty Netty提供异步的、事件驱动的网络应用程...

shuoshuo132的博客 328

【论文详解】AlphaGenome——Sequence-to-Multimodal-Genome-Track

**AlphaGenome** 是由 **Google DeepMind** 于 2025 年 6 月发布的突破性 AI 模型,专门用于预测非编码区遗传变异的功能效应。该模型采用受 **U-Net** 启发的卷积架构结合 **Transformer** 模块,创新性地解决了传统模型在输入序列长度与预测分辨率之间的核心矛盾——能够在 **1M 碱基对的超长上下文** 下实现 **单核苷酸分辨率** 的精准预测。

zwhszdx的博客 959

[DDR5] 模式寄存器 Mode Register MRR/MRW

模式寄存器用于定义各种操作模式。在初始化过程中,可以通过重新执行MRS命令来更改模式寄存器的内容。

串起点滴 1639

netty体系结构数据

肝了一个月的Netty知识点(上) - 掘金 3万字加50张图,带你深度解析 Netty 架构与原理(下) - 掘金

jjjackjack的博客 369

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

一、Netty的概念与体系结构

1、Netty介绍 1.1、简介 Netty是由JBOSS提供的一个java开源框架,现为Github上的独立项目 Netty是一个异步的,基于事件驱动的网络应用框架,用以快速开发性能、高可靠性的网络IO程序。 Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用。 Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景 1.2、特点 设计 统一的API,支持多种传输类型,阻塞和非阻塞的 简单而强大的线程模型 真正的无连

weixin_43676950的博客 281

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Netty概念和体系结构

异步和事件驱动  Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。 Netty简介 分类 Netty特性 设计 统一的API,支持多种传输类型,阻塞的和非阻塞的简单强的的线程模型真正的无连接数据报套接字支持链接逻辑组件以支持复用 易用使用 详实的Javadoc和大量的事例集不需要超过JDK1...

Code 197

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Netty源码分析-缓冲区Buffer体系结构设计

概念 Netty的缓冲区Buffer是一个与Netty框架相对独立的模块,在Java NIO中使用ByteBuffer作为缓冲区实现,但是ByteBuffer是使用单指针position来控制对缓冲区的读写操作的,在读写之间需用通过flip函数来切换position指针,若忘记调用flip,则可能在写了之后读不出来,用法比较繁琐,而且容易出错,关于Java NIO的设计,可以参考我的另外一篇文章...

源码之下,了无秘密 4989

Netty组件体系结构

把书读薄(Netty in action 第三章)helloworld中:Channel、Eventloop 、ChannelFuture 是什么关系?它们是netty对网络的抽象组件。Channel本身用来提供基本的IO操作(bind/connect/read/write),连接建立之后通过EventLoop来处理所发生的事情,它们之间的对应关系是1个channel只能有1个EventLoop,...

爬蜥 172

《netty实战》阅读笔记(1)——Netty 的概念及体系结构

netty的概念 定义 Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。我们可以很简单的使用Netty 构建应用程序,你不必是一名网络编程专家;而且Netty 比直接使用底层的Java API 容易得多,它推崇良好的设计实践,可以将你的应用程序逻辑和网络层解耦。 Netty的特性...

weixin_33670713的博客 258

Netty学习二:计算机网络基础

NeNetty是一个基于Java的网络编程框架,它构建在TCP/IP通信协议之上。了解计算机网络通信基础知识对于深入理解Netty的应用程序开发是至关重要的,这包括TCP连接的建立和断开过程以及报文在TCP/IP协议中的传输过程。

weixin_49471976的博客 1099

美团架构师精心整理Netty实战,墙裂推荐Netty实战实践学习文档

首先简要概述了阻塞和非阻塞的网络 API,以及它们对应的 JDK 接口。我们引入 Netty作为构建高度可伸缩的、异步的、事件驱动的网络编程应用的工具包。我们将首先看一下该框架的基础构件块:Channel、回调、Future、事件及 ChannelHandler。

m0_62051288的博客 213

13W字!腾讯高工手写“Netty速成手册”,3天能走向实战

2.预置的ChannelHandler和编解码器(通过SSL/TLS保护Netty应用程序+构建基于Netty的HTTP/HTTPS应用程序+空闲的连接和超时+解码基于分隔符的协议和基于长度的协议+写大型数据+序列化数据)5.ByteBuf(ByteBuf的API+ByteBuf类——Netty的数据容器+字节级操作+ByteBufHolder接口+ByteBuf分配+引用计数)1.Netty——异步和事件驱动(Java网络编程+Netty简介+Netty的核心组件)+解码器+编码器+抽象的编解码器类)

代码界的扛把子 755
上一篇: Java多线程基础
下一篇: netty常用内置Handler
九号铅笔芯
博客等级 码龄9年 9粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值