首页 > 其他分享 >Netty-操作篇

Netty-操作篇

时间:2023-11-20 21:55:50浏览次数:29  
标签:Netty 解码器 ChannelHandler 步骤 Handler 线程 消息 操作

服务端创建步骤

步骤一:创建ServerBootstrap实例。

步骤二:设置并绑定Reactor线程池。

步骤三:设置并绑定服务端Channel。

步骤四:链路建立的时候创建并初始化ChannelPipeline(非必须)。

用于处理网络事件:

1.链路注册、激活、断开、发生异常

2.接收到请求消息

3.请求消息接收并处理完毕

4.发送应答消息

5.发生用户自定义事件

步骤五:初始化ChannelPipeline完成之后,添加并设置ChannelHandler。

比较实用的ChannelHandler:

1.系统编码框架:ByteToMessageCodec

2.通用基于长度的半包解码器:LengthFieldBaseFrameDecoder

3.码流日志打印Handler:LoggingHandler

4.SSL安全认真Handler:SslHandler

5.链路空闲检测Handler:IdleStateHandler

6.流量整型Handler:ChannelTrafficShapingHandler

7.Base64编解码:Base64Decoder和Base64Encoder

步骤六:绑定并启动监听端口

步骤七:Selector轮询

步骤八:当轮询到准备就绪的Channel之后,就由Reactor线程NioEventLoop执行ChannelPipeline的相应方法,最终调度并执行ChannelHandler

步骤九:执行Netty系统ChannelHandler和用户添加定制的ChannelHandler。

常见问题

异步操作-ChannelFuture

1.Netty强烈建议通过添加监听器的方式获取I/O操作结果

2.可以同时添加一个或多个GenericFutureListener,也可以用remove方法删除

3.注意不要在ChannelHandler中调用ChannelFuture的await()方法,这会导致死锁。原因是发起I/O操作之后,由I/O线程负责异步通知发起I/O才注意的用户线程,如果I/O线程和用户线程是同一个线程,就会导致I/O线程等待自己通知自己操作完成,这就导致了死锁

粘包问题

解决策略:

1.消息定长,例如每个报文的大小固定为200字节,如果不够,空位补空格。

2.在包尾增加回车换行符进行分割,例如FTP协议。

3.将消息分为消息头和消息体,消息头包含消息总长度(或者消息体长度)的字段,通常设计思路为第一个字段使用int32来表示消息的总长度。

4.更复杂的应用层协议。

内置的编码解码器

1.LineBasedFrameDecoder:工作原理是它依次遍历ByteBuf中的可读字节,判断看是否有“\n”或者“\r\n”,如果有,就以此位置为结束位置,从可读索引到结束位置区间的字节就组成了一行。它是以换行符为结束标志的解码器,支持携带结束符或者不携带结束符两种解码方式,同时支持配置单行的最大长度。如果连续读取到最大长度后仍然没有发现换行符,就会抛出异常,同时忽略掉之前读取到的异常码流。

2.StringDecoder:将接收到的对象转换成字符串,然后继续调用后面的Handler。

3.LineBasedFrameDecoder+StringDecoder组合就是按行切换的文本解码器,它被设计用来支持TCP的粘包和拆包。

标签:Netty,解码器,ChannelHandler,步骤,Handler,线程,消息,操作
From: https://www.cnblogs.com/nxjblog/p/17844989.html

相关文章

  • Netty-基础篇(4)
    不使用Java原生NIO编程的原因1、NIO的类库和API复杂,使用麻烦2、需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程3、可靠性能力补齐,工作量和难度都非常大。例如客户端面临断线重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题。4、JDKNIO的BUG,例如臭......
  • C#文件操作
    使用FIle的静态方法进行文件操作1//使用file的静态方法进行复制2File.Copy(path,destpath);3//使用File的静态方法删除路径下的一个文件4File.Delete(path);5//使用File的静态方法移动路径下的一个文件6File.Move(path,destpath);7File.ReadAllText(path);//打......
  • Linux操作系统的优势官方开发App应用程序有哪些优缺点?
    随着技术的不断进步,Linux操作系统在应用程序开发中扮演着越来越重要的角色。其开放性、稳定性和定制性成为开发者的首选。图片来源:http://news.gulufenfa.com/post/211Linux系统简介Linux作为一个广泛使用的开源操作系统,它的核心是Linux内核,由LinusTorvalds在1991年首次发布。Linu......
  • playwright录制功能使用绕过登录操作
    1.终端上执行下面的命令会生成一个录制页面2.在录制页面输入自己要登录的网址,输入账号密码或者有验证码的,正常的登录操作,操作成功后,会在本地目录生成一个文件保存了cookies  3.下次我们在终端命令输入直接录制的网址即可,已经跳过登录操作了 4.playwrightopen--load-st......
  • List 函数排序操作,用对方法事半功倍!
    作为一名程序员,以下这些场景你肯定不陌生,1.数据分析和处理:在处理大量数据时,需要对数据进行排序以进行进一步的分析和处理。例如,在市场调研中,可能需要按照客户的购买频率对客户列表进行排序,以确定哪些客户最有可能购买产品或服务。2.报表生成:在生成报表时,往往需要按照特定的顺序对......
  • revit视口移动操作-快捷键
     1、旋转—三维才有按住键盘shift键盘+滚轮(鼠标中间),移动鼠标可旋转2、放大、缩小:按住shift键盘,前后滚动可放大缩小3、移动:只需要按下鼠标滚动,移动鼠标4、选中:(1)点选:点击,可加Ctrl,shift可减选(2)框选:用鼠标框住,从右往左(反选,选中所有可使用)—从左往右(正选,部分不会被选中......
  • 关于视频点播平台EasyDarwin视频直播平台如何上传点播视频的具体操作步骤
    EasyDarwin互联网视频云服务通过其高效的视频管理功能和广泛适用性,为用户提供稳定、流畅的视频服务,广泛应用于各种互联网场景。应用场景包括电视直播、现场直播、时移电视、即刻回看和视频点播功能,适用于OTTTV、IPTV、互联网教育、视频聊天、现场直播和VOD等各种场景应用。E......
  • 关于视频点播平台EasyDarwin视频直播平台如何上传点播视频的具体操作方式
    EasyDarwin互联网视频云服务通过其高效的视频管理功能和广泛适用性,为用户提供稳定、流畅的视频服务,广泛应用于各种互联网场景。应用场景包括电视直播、现场直播、时移电视、即刻回看和视频点播功能,适用于OTTTV、IPTV、互联网教育、视频聊天、现场直播和VOD等各种场景应用。EasyD......
  • SQL執行更新或刪除時,避免誤操作方法
    1.使用數據表別名儘量使用數據表別名,先對要操作的數據進行查詢,確保數據準確無誤。SELECT*--DELETEw--updatgewset iw_RptId='231110TB201-010'FROMIPQAInsWo wWHEREiw_RptId='231110TB201-010' 2.所有的條件與表同一行在更新或刪除數據時,儘量數據表,條件保持在......
  • 位带操作理解
    1.概念理解位带操作实际就是通过将寄存器的一个位(bit)映射到某一个区域的字(32位)上,这些区域的字已经由官方设定好,我们通过对这些字的操作就能够实现对寄存器的某个位操作。图像如下stm32一个字有4个字节共32个位,膨胀之后为在别名区为4*8=32个字。所以接下来要做的就是根据位带区......