网站正能量晚上在线观看,庐江网站制作,企业网站多少钱,电子商务网站设计成功的要素目录 为什么要学习nettynetty学习导图学习netty前需要知道的知识I/O模型主要I/O模型 netty框架的整体结构netty的逻辑架构网络通信层事件调度层服务编排层 为什么要学习netty
Netty是由JBOSS提供的一个Java开源框架#xff0c;现为Github上的独立项目。Netty本质是一个NIO框架… 目录 为什么要学习nettynetty学习导图学习netty前需要知道的知识I/O模型主要I/O模型 netty框架的整体结构netty的逻辑架构网络通信层事件调度层服务编排层 为什么要学习netty
Netty是由JBOSS提供的一个Java开源框架现为Github上的独立项目。Netty本质是一个NIO框架通过异步、基于事件驱动的IO用以快速开发高性能、高可靠性的网络IO程序主要针对在TCP协议下面向Client端的高并发应用或者Peer-to-Peer场景下的大量数据持续传输的应用。
作为Java后端研发同学一定都会接触到框架和网络通信就我接触过并看过源码的开源项目可以说基本上都是使用Netty作为网络通信的底层框架如Dubbo、RocketMQ、Canal、otter、HBase等等。 ———————————————— 版权声明本文为CSDN博主「西木风落」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/chenwiehuang/article/details/103937396
netty学习导图 学习netty前需要知道的知识
I/O模型
I/O请求分为两个阶段
I/O调用阶段用户进程向内核发起系统调用I/O执行阶段内核等待I/O请求处理完成并返回
如下图
主要I/O模型 同步堵塞I/O BIO 同步非堵塞I/O NIO I/O多路复用 信号驱动I/O 异步I/O
netty的IO模型是基于非堵塞IO底层实现依赖于JDK NIO的多路复用器Selector
事件处理器(Event Handler)
负责将读写事件分发给对应的读写事件处理器(Event Handler)
Reactor 使用同步IO和 Proactor 异步IO主流的事件模型主要使用Reactor 或Epoll netty框架的整体结构 Core核心层 提供底层网络通信的通用抽象和实现包括可扩展的事件模型、通用的通信API、支持零拷贝的 ByteBuf等
Protocol Support 协议支持层
覆盖了主流协议的编解码实现如HTTP、SSL、Protobuf、压缩、大文件传输、WebSocket、文本、二进制等支持自定义应用层协议
Transport Service传输服务层
传输服务层提供了网络传输能力的定义和实现方法支持Socket、HTTP隧道、虚拟机管道等传输方式Netty的模块设计具备较高的通用性和可扩展性 支持自定义应用层协议
netty的逻辑架构 网络通信层
网络通信层的职责是执行网络I/O的操作支持多种网络协议和I/О模型的连接操作包括ServerBootstrapBootstrapChannel组件 Bootstrap可用于连接远端服务器只绑定一个EventLoopGroup Boss负责客户端的启动ServerBootStrap 用于服务端启动绑定本地端口绑定两个EventLoopGroup Worker负责服务端的启动
BootstrapServerBootStrap是netty程序的入口
每个服务器中都会有一个Boss会有一群做事情的 Worker Boss 会不停地接收新的连接将连接分配给一个个Worker处理连接 roup √支持自定义应用层协议
Channel Channel是网络通信的载体提供了基本的API用于网络I/О操作 如register、bind、connect、read、write、flush等Netty自己实现的Channel是以JDKNIO Channel为基础的 Channel会有多种状态如连接建立、连接注册、数据读写、 连接销毁等
Channel的状态
事件说明channelRegisteredChannel创建后被注册到EventLoop 上channelUnregisteredChannel创建后未注册或者从EventLoop取消注册channelInactiveChannel处于非就绪状态channelReadChannel可以从远端读取到数据
小结
BootStrap和ServerBootStrap 分别负责客户端和服务端的启动 Channel是网络通信的载体提供了与底层Socket交互的能力
事件调度层
通过Reactor线程模型对各类事件进行聚合处理通过Selector主循环线程集成多种事件 核心组件包括EventLoopGroup、EventLoop EventLoopGroup是Netty Reactor线程模型的具体实现方式
服务编排层 ChannelPipeline负责组装各种ChannelHandler实际数据的编解码以及加工处理操作由ChannelHandler完成
当I/O读写事件触发时ChannelPipeline会 依次调用ChannelHandler列表对Channel的数据进行拦截和处理
每一个新的Channel会对应绑定一个新的ChannelPipeline线程安全的一个ChannelPipeline关联一个EventLoop一个EventLoop仅会绑定一个线程
ChannelPipeline入站和出站 channel和ChannelPipeline的关系
ChannelHandlerContext的作用
保存ChannelHandler上下文实现ChannelHandler之间的交互包含ChannelHandler生命周期的所有事件 如connect、bind、read、flush、write、close等
组件之间的协作
小结
Bootstrap负责客户端或服务端的启动工作包括创建、初始化Channel等EventLoop负责向注册的Channel发起I/O读写操作channelPipeline负责ChannelHandler的有序编排