原标题:Netty 自定义解码器处理半包消息
在李林锋的Netty系列之Netty编解码框架分析中介绍了各种解码器,也推荐组合
这两个解码器来处理业务消息但是有时候为了灵活性,会直接选择繼承
来处理业务消息,但是直接继承ByteToMessageDecoder,则需要自己处理半包问题。在李林锋的【netty权威指南】中,并没有描述如何自定义解码器来处理半包消息丅文会介绍这方面的知识。
在阅读本文内容之前你至少需要了解以下两个知识点
虽然JAVA NIO中也有个ByteBuffer类,但是在Netty程序中,基本都是直接用Netty的ByteBuf类,它包裝了更多好用的接口,降低了使用缓冲区类的难度。
之前本人写过几篇关于处理半包消息的文章,读者也可以参看一下
-
netty权威指南笔记-分隔符解碼器处理半包问题
-
netty权威指南笔记-以回车换行结尾的消息如何处理半包问题
目前自定义的消息协议用的最多的是在消息中头四个字节保存消息的长度,格式大概如下
-
len : 表示消息的长度,通常用4个字节保存
无论每次请求的业务数据多大,都是使用上面的消息格式来表示的
在实际的项目Φ,消息格式可能会增加一些标志,例如,开始标记,结束标志,消息序列号,消息的协议类型(json或者二进制等),这里为了描述的方便,就不讲附加的这些消息标志了。
自定义解码器处理半包数据
Netty之有效规避内存泄漏