首页 > 其他分享 >Netty-基础篇

Netty-基础篇

时间:2023-11-16 23:22:33浏览次数:25  
标签:Netty ChannelHandler ChannelPipeline EventLoop 基础 处理 Channel

核心组件

EventLoopGroup

概念:由一个或多个EventLoop组成的组,用于处理所有的Channel的I/O操作,可以将其看作是一个线程池。

1.包含多个EventLoop。

2.EventLoopGroup将为每个新创建的Channel分配一个EventLoop。在每个Channel的整个生命周期内,所有的操作都将由相同的Thread执行。

3.每个EventLoop将处理分配给它的所有Channel的所有事件和任务。每个EventLoop都和一个Thread关联。

EventLoop — 控制流、多线程处理、并发

概念:事件循环器,用于处理所有I/O事件和请求。Netty的I/O操作都是异步非阻塞的,它们由EventLoop处理并以事件的方式触发回调函数。

1.一个 EventLoop 在它的生命周期内只和一个 Thread 绑定。

2.所有由 EventLoop 处理的 I/O 事件都将在它专有的 Thread 上被处理。

3.一个 Channel 在它的生命周期内只注册于一个 EventLoop。

4.一个 EventLoop 可能会被分配给一个或多个 Channel。

ChannelPipeline

概念:由一组ChannelHandler组成的管道,用于处理Channel上的所有I/O 事件和请求,Netty中的数据处理通常是通过将一个数据包装成一个ByteBuf对象,并且通过一个 ChannelPipeline来传递处理,以达到业务逻辑与网络通信的解耦。

ChannelPipeline 提供了 ChannelHandler 链的容器,并定义了用于在该链上传播入站 和出站事件流的 API。当 Channel 被创建时,它会被自动地分配到它专属的 ChannelPipeline。

ChannelHandler 安装到 ChannelPipeline 中的过程:

1.一个ChannelInitializer的实现被注册到了ServerBootstrap中。

2.当 ChannelInitializer.initChannel()方法被调用时,ChannelInitializer 将在 ChannelPipeline 中安装一组自定义的 ChannelHandler。

3.ChannelInitializer 将它自己从 ChannelPipeline 中移除。

Channel——socket

概念:用于网络通信的通道,可以理解为Java NIO中的SocketChannel。

1.基本的 I/O 操作(bind()、connect()、read()和 write())依赖于底层网络传输所提 供的原语。

2.Channel 也是拥有许多 预定义的、专门化实现的广泛类层次结构的根。

ChannelFuture — 异步通知。

概念:异步操作的结果,可以添加监听器以便在操作完成时得到通知。

因为一个操作可能不会 立即返回,所以我们需要一种用于在之后的某个时间点确定其结果的方法。为此,Netty 提供了 ChannelFuture 接口,其 addListener()方法注册了一个 ChannelFutureListener,以 便在某个操作完成时(无论是否成功)得到通知。

ChannelHandler——适配器

概念:用于处理Channel上的I/O事件和请求,包括编码、解码、业务逻辑等,可以理解为NIO中的ChannelHandler。

入起点-ChannelInboundHandlerAdapter。

出起点-ChannelOutboundHandlerAdapter。

结构:

1.channelActive()——在到服务器的连接已经建立之后将被调用。

2.channelRead()——当从服务器接收到一条消息时被调用。

3.exceptionCaught()——在处理过程中引发异常时被调用。

典型用途:

1.将数据从一种格式转换为另一种格式。

2.提供异常的通知。

3.提供Channel变为活动或者非活动的通知。

4.提供当Channel注册到EventLoop或者EventLoop注销时的通知。

5.提供有关用户自定义事件的通知。

 

标签:Netty,ChannelHandler,ChannelPipeline,EventLoop,基础,处理,Channel
From: https://www.cnblogs.com/nxjblog/p/17837529.html

相关文章

  • 汇编语言基础语法,然后什么是汇编语法,比喻一下
    汇编语言是一种低级编程语言,它非常接近于计算机硬件的操作语言。了解汇编语言的基础语法首先需要了解它的核心概念和基本结构。汇编语言的基本概念操作码(Opcode):这是指示计算机执行特定操作的命令,如加法、减法等。操作数(Operand):这是操作码作用的对象,可以是数值、内存地址或者寄......
  • HTML基础
    html标签上基础标签图像标签及路径超链接注释及其他特殊符号html标签下表格标签列表标签表单标签(也可以直接把内容包含在label双标签内,不用for和id也能完成相同效果)其他f1vz一键注释快捷键:Crtl+/shift+alt+方向键的下,直接向下复制一行......
  • 学期2023-2024-1 20231401 《计算机基础与程序设计》第八周学习总结
    学期2023-2024-120231401《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第八周作业这个作业的目标《计算机科学概论》第9章《C语言程序设计》第7章并......
  • 数学基础:三角形重心坐标插值公式的证明
    在快速Phong明暗处理(Blinn-Phong明暗处理)时,出现了三角形重心坐标插值公式,但没有给出证明.网上也鲜有证明过程,这里给出证明.问题描述:在三角形ABC中,三顶点A、B、C坐标分别为\((x_1,y_1,z_1)、(x_2,y_2,z_2)、(x_3,y_3,z_3)\).则三角形内任一点P(x,y,z)可表示为:\[\tag{1}P=\alph......
  • netty tls单向认证通讯
    需求背景项目主要分为监管侧和企业侧,企业侧实时上传数据到云端,云端汇聚业务数据,上传过程需要保证传输的安全性。技术实现数据上传考虑到用HTTPS或者是TCP+TLS传输。其实使用HTTPS传输协议是比较简单的,但是项目硬件使用的4G无线网卡,而且需要实时检测设备运行状态,所以使用......
  • 【C++】【图像处理】形态学处理(腐蚀、膨胀)算法解析(以.raw格式的图像为基础进行图像处
    1voiderosion(BYTE*image,intw,inth,BYTE*outImg)2{3intrept;4//腐蚀5memcpy(outImg,image,sizeof(BYTE)*w*h);//将读取的图像赋值给outImg,方便进行腐蚀操作67inti,j,m,n;8BYTEflag;9for(rept=0;rept......
  • Netty - 快速开始
    一、为什么使用Netty1.NIO的缺点NIO的类库和API繁杂,学习成本高,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要熟悉Java多线程编程。这是因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能写出高质量的NIO程序。臭名昭著......
  • 前景一片蓝海,Android音视频开发必备基础知识汇总
    前言转瞬间,2023只剩一个半月,再过去的一年里,音视频技术在经历一番风浪的侵袭过后,变得逐渐相对平静下来。“内卷”之外,大家似乎更多了一份“理性”指导我们去做一些正确的事,追求技术在商业中的更高价值。具体体现在我们要思考如何才能将自身能力更多、更快、更好的转化为产品。无论......
  • MX Component基础使用
     完整代码1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.Linq;7usingSystem.Text;8usingSystem.Threading.Tasks;9usingSystem.Windows.For......
  • python基础之字典 Dictionary
      字典Dictionary¶在Python中,字典(Dictionary)是一种无序的、可变的数据类型,用于存储键-值(key-value)对的集合。字典是通过键来索引和访问值的,而不是通过位置。字典dictionary,在一些编程语言中也称为hash,map,是一种由键值对组成的数据结构。  基......