多语言展示
当前在线:537今日阅读:168今日分享:49

Netty如何通过分隔符解码处理器解决粘包问题

在前一篇经验中分享了使用定长解码处理器解决粘包半包读写问题,本篇经验继续分享如何通过分隔符解码处理器解决这个问题。经验引用1:如何通过定长解码处理器解决粘包半包问题经验引用2,3:本篇经验基于这两篇经验创建的服务端和客户端工程进行开发 0Netty如何通过定长解码器解决粘包半包的问题0如何通过Netty开发基于NIO的服务端程序0如何通过Netty开发基于NIO的客户端程序
工具/原料
1

Eclipse

2

Netty5.0

方法/步骤
1

服务端工程和客户端工程添加相关依赖图示,服务端工程和客户端工程的pom.xml文件中添加 netty-codec-http 的相关依赖,注意,修改完 pom.xml 文件后,需要更新一下工程。

2

服务端和客户端新增分隔符解码处理器和字符串解码处理器图1示:服务端事件处理器链中添加分隔符解码处理器和字符串界面处理器,前者用于通过分隔符处理粘包问题,后者主要简化自定义事件处理器的解码操作图2示:客户端事件处理器链中添加分隔符解码处理器和字符串界面处理器

3

修改服务端和客户端自定义事件处理器图1示:因为使用了字符串解码处理器,服务端自定义事件处理器的 channelRead 方法获取的数据直接就是字符串类型,并且发送给客户端的响应需要添加分隔符信息。图2示:客户端自定义事件处理器的相关修改

4

依次启动服务端和客户端应用,进行第一次测试图示:客户端发送给服务端3段数据包含2组分隔符,服务端实际处理了2组数据并响应,第3组数据因为没有分隔符,被服务端认为是不完整的消息而保留在缓冲区,未被处理。

5

客户端再次发送一组分隔符数据,进行第二次测试图示,因为第一次发送数据时,有1段数据因为没有分隔符而没有被处理,这次当客户端发送了一个分隔符后,这段数据被服务端读取到并进行处理响应

6

使用分隔符解码处理器处理粘包问题的步骤1. 服务端在构建事件处理器链时,创建并添加分隔符解码处理器(需通过 ByteBuf 指定分隔符,并建议指定消息最大长度)2. 客户端在构建事件处理器链时,创建并添加分隔符解码处理器

推荐信息