版权声明:士,不可以不弘毅,任重而道远 https://blog.csdn.net/superbeyone/article/details/85876207
Netty之处理器
Netty处理器重要概念:
- Netty的处理器可以分为两类:
入站处理器
与出站处理器
入站处理器
的顶层是ChannelInboundHandler
,
出站处理器
的顶层是ChannelOutboundHandler
;- 数据处理时常用的各种编解码器本质上都是处理器;
- 编解码器:无论我们向网络中写入的数据是什么类型(int,char,String,二进制等),数据在网络中传递时,其都是以字节流的形式呈现的;将数据由原本的形式转换为字节流的操作称为编码(
encode
),将数据由字节转换为它原本的格式或是其它格式的操作称为解码(decode
),编解码统一称为codec
; - 编码: 本质上是一种出站处理器;因此,编码一定是一种
ChannelOutboundHandler
;「程序 -> 网络」 - 解码:本质上是一种入站处理器;因此,解码一定是一种
ChannelInboundHandler
;「网络 -> 程序」 - 在Netty中,编码器通常以xxxEncoder命名;解码器通常以xxxDecoder命名;
注:
顶层接口
ChannelHandler
ChannelInboundHandler
与ChannelOutboundHandler
均继承自ChannelHandler
Netty编解码器的重要结论:
- 无论是编码器还是解码器,所接收的消息类型必须要与待处理的参数类型一致,否则该编码器或解码器并不会被执行;
- 在解码器进行数据解码时,一定要记得判断缓冲(
ByteBuf
)中的数据是否足够,否则将会产生一些问题;
自定义编码器:
- 继承
MessageToByteEncoder
,实现encode()
方法 - …
自定义解码器:
- 继承
ByteToMessageDecoder
,实现decode()
方法 - 继承
ReplayingDecoder<T>
,实现decode()
方法 - …