首页 > 其他分享 >Netty的常用操作

Netty的常用操作

时间:2024-08-16 23:04:28浏览次数:12  
标签:Netty 常用 int value Future ByteBuf 缓冲区 操作 Channel

EventLoop

  • EventLoop本质上是一个单线程执行器,里面有run方法处理Channel上源源不断的IO事件。
  • EventLoop继承了ScheduledExecutorService中的所有方法。

常用方法

  • Future<?> submit(Runnable task) 提交任务
  • ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) 循环执行,执行前需要等待延时

EventLoopGroup

  • EventLoopGroup是一组EventLoop,Channel一般会调用EventLoopGroup的register方法来绑定到其中某个EventLoop,后续该Channel的所有io事件都由它处理。
  • 常用实现:NioEventLoopGroup

常用方法

  • Future<?> shutdownGracefully() 停止所有EventLoop

Channel

常用方法

  • ChannelFuture close() 关闭
  • ChannelFuture closeFuture() 获取一个ChannelFuture,当通道关闭后会被通知
  • ChannelPipeline pipeline() 获取管道,用以操作
  • ChannelFuture write(Object msg) 写数据
  • ChannelFuture writeAndFlush(Object msg) 写数据并冲刷

可以使用EmbeddedChannel测试Channel

Future & Promise

  • Future是对 JDK Future(java.util.concurrent.Future) 接口的一个扩展,以实现异步操作操作。
  • Promise又对Future进行了扩展,允许手动设置异步操作的结果。常用实现为DefaultPromise。

JDK Future方法

  • V get() 阻塞获取结果
  • boolean isDone() 任务是否完成
  • boolean isCancelled() 任务是否被取消

Future方法

  • V getNow() 获取结果,非阻塞,没有结果返回null
  • Future sync() 阻塞等待任务结束
  • boolean isSuccess() 任务是否成功
  • Throwable cause() 获取失败的信息,非阻塞,没有失败返回null
  • Future addListener(GenericFutureListener<? extends Future<? super V>> listener) 添加监听器,有结果时会通知,异步获取结果

Promise方法

  • Promise setSuccess(V result) 标记为成功,设置结果并通知监听器
  • Promise setFailure(Throwable cause) 标记为失败,设置失败原因并通知监听器

Handler & Pipeline

  • ChannelHandler用来处理Channel上的各种事件,分为入站和出站两种。
  • Pipeline由一组ChannelHandler串起来组成。
  • 入站处理器通常是ChannelInboundHandlerAdapter的子类,主要用来读取客户端数据,写回结果。(子类调用super.channelRead(ctx,msg)继续向下传递)
  • 出站处理器通常是ChannelOutboundHandlerAdapter的子类,主要对写回结果进行加工
  • 入站处理器从最上面的处理器往下传递运行,出站处理器从最底下的处理器往上传递运行。注意:nioSocketChannel.writeAndFlush(msg)是从Pipeline的末尾往前找Handler运行,而channelHandlerContext.writeAndFlush(msg)是从当前Handler往前找Handler运行。

ByteBuf

来处理字节数据。

特点

  • 支持动态扩容
  • 提供了零拷贝相关方法
  • 堆缓冲区和直接缓冲区: 直接缓冲区性能高,但是分配与释放慢。
  • 支持内存池

内存分配器

内存池减少了频繁分配和释放内存的开销,从而提高了性能。

ByteBufAllocator bba = ByteBufAllocator.DEFAULT; //默认分配器(池化) -Dio.netty.allocator.type={unpooled | pooled} 配置默认方式
ByteBufAllocator bba = PooledByteBufAllocator.DEFAULT; //池化
ByteBufAllocator bba = UnpooledByteBufAllocator.DEFAULT; //非池化

堆缓冲区与直接缓冲区

ByteBuf buf = ByteBufAllocator.DEFAULT.heapBuffer();//堆缓冲区
ByteBuf buf = ByteBufAllocator.DEFAULT.directBuffer();//直接缓冲区

操作

索引:
readerIndex
writerIndex
markedReaderIndex
markedWriterIndex
capacity 容量,容量不够会扩容,超过maxCapacity会报错
maxCapacity 最大容量
写:writerIndex随着写移动

  • ByteBuf writeBoolean(boolean value);
  • ByteBuf writeByte(int value);
  • ByteBuf writeShort(int value);
  • ByteBuf writeInt(int value);
  • ByteBuf writeLong(long value);
  • ByteBuf writeChar(int value);
  • ByteBuf writeFloat(float value);
  • ByteBuf writeDouble(double value);
  • ByteBuf writeBytes(ByteBuf src);
  • ByteBuf writeBytes(byte[] src);
  • int writeCharSequence(CharSequence sequence, Charset charset);

读:readerIndex随着read相关操作移动

  • boolean readBoolean();
  • byte readByte();
  • short readShort();
  • int readInt();
  • ......

get/set相关操作:获取或设置指定索引的数据
标记:

  • ByteBuf markReaderIndex(); 读标记
  • ByteBuf resetReaderIndex(); 将读索引跳转到读标记

其他:

  • ByteBuf slice(int index, int length); 切割

释放

基于引用计数器,引用计数器到0时释放内存
boolean release(); 引用计数器-1
ByteBuf retain(); 引用计数器+1
释放时机为最后使用ByteBuf的Handler负责释放

标签:Netty,常用,int,value,Future,ByteBuf,缓冲区,操作,Channel
From: https://www.cnblogs.com/aoikumo/p/18363818

相关文章

  • 操作符详解(二)
    目录1.逗号表达式2.下标访问[]、函数调用()1) []下标引用操作符2) 函数调用操作符3.结构成员访问操作符1)结构体2)结构的声明3)结构体变量的定义和初始化4)结构体成员的直接访问5)结构体成员的间接访问4.操作符的属性:优先级、结合性1)优先级2)结合性5. 表达......
  • PbootCMS常用 if 判断
    1.导航高亮{pboot:if('[nav:scode]'=='{sort:tcode}')}class="active"{/pboot:if}//用于非首页例:{pboot:nav}<li{pboot:if('[nav:scode]'=='{sort:tcode}')}class="active"{/pboot:if}><ahref="......
  • 操作系统-系统环境
    一、UNIX系统介绍​诞生于1971年美国AT&T公司的贝尔实验室,主要开发者是丹尼斯.里奇、肯.汤普逊。​ 该系统的主要特点是支持多用户、多任务,并支持多种处理器架构,同时具有高安全性、高可靠性、高稳定性,既可以构建大型关键业务系统的商业服务器,也可以构建面向移动终端、手持设......
  • 腾讯地图SDK Android版开发 5 地图交互操作
    腾讯地图SDKAndroid版开发5地图交互操作前言控件介绍控件介绍接口控件常量地图控件点击事件示例代码效果图地图手势地图手势方法说明地图手势开关地图手势事件当地图被点击时回调接口当地图被长按时回调接口地图手势识别的回调地图状态地图状态类地图状态构造类地......
  • utilman.exe 是 Windows 操作系统中的一个系统工具程序,全称为 Utility Manager。它的
    utilman.exe(实用工具管理器)在Windows系统中主要用于启动辅助功能工具,但它也曾经被发现存在一些安全漏洞。这些漏洞通常利用utilman.exe的特性进行权限提升或绕过安全机制。以下是一些已知的与utilman.exe相关的公开漏洞:1. CVE-2019-0708(BlueKeep)描述:这个漏洞影响了......
  • 无需刷机和复杂操作,一个软件,用学习机看小说!
    无需刷机和复杂操作,一个软件,用学习机看小说!经常听歌的朋友应该知道,在下载音乐时,有的软件会自动下载歌词文件-LRC文件一般的音乐播放器会自动识别在音频文件同目录下的LRC文件,LRC文件需要与音频文件同名而LRC文件的编辑格式和文本文件的编辑格式相近,只是在前面多了一串时间......
  • Windows操作系统远程桌面端口修改脚本
    change_rdsport_CN.bat:@echooffcolorf0echo修改远程桌面3389端口(支持Windows2003,2008,2008R2,2012,2012R2,7,8,10)echo自动添加防火墙规则set/pc=请输入新的端口:if"%c%"==""gotoend:editnetshadvfirewallfirewalladdrulename="RemotePortNum......
  • 倾向匹配得分模型 PSM 及 Stata 具体操作步骤
    目录一、引言二、文献综述三、理论原理四、实证模型五、程序代码及解释六、代码运行结果七、稳健性检验八、结论一、引言倾向匹配得分模型(PropensityScoreMatching,PSM)是一种在观察性研究中用于减少选择偏差的常用方法。通过估计个体接受某种处理(例如参与某个......
  • Heckman 模型及 Stata 具体操作步骤
    目录一、文献综述二、理论原理三、实证模型四、稳健性检验五、程序代码及解释六、代码运行结果一、文献综述Heckman模型自提出以来,在众多领域得到了广泛且深入的应用。例如,在劳动经济学领域,Heckman(1979)率先将该模型应用于劳动力供给的研究,成功解决了样本选择偏差......
  • 字符串比较的常用函数
    staticvoidMain(string[]arg){intint1=0;intint2=0;intint3=0;stringstr1="adf";stringstr2="adf";stringstr3="Adf";......