在前一篇经验中分享了使用定长解码处理器解决粘包半包读写问题,本篇经验继续分享如何通过分隔符解码处理器解决这个问题。经验引用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. 客户端在构建事件处理器链时,创建并添加分隔符解码处理器
上一篇:方舟手游给受伤后的恐龙加血的方法
下一篇:东北粘豆包做法