Netty实现数据格式转换的方式是继承实现ByteToMessageDecoder和MessageToByteEncoder。服务器
ByteToMessageDecoder继承ChannelInboundHandlerAdapter函数
MessageToByteEncoder继承ChannelOutboundHandlerAdapter编码
ByteToMessageDecoder在数据流转过程当中承担角色以下所示:加密
MessageToByteEncoder在数据流转过程当中承担角色以下所示: code
-
若是须要作数据格式的转换,能够使用MessageToMessageDecoder和MessageToMessageEncoder;cdn
-
若是须要处的ByteBuf太长,能够抛出TooLongFrameException;blog
-
若是须要一个类实现编码和解码能够对应实现ByteToMessageCodec和MessageToMessageCodec继承
-
若是一类实现编码和解码以为耦合严重,能够使用CombinedChannelDuplexHandler事件
Netty中有哪些自带的ChannelHandler?
- SslHandler:负责对请求进行加密和解密,是放在ChannelPipeline中的第一个ChannelHandler
- HttpClientCodec和HttpServerCodec:HttpClientCodec负责将请求字节解码为HttpRequest、HttpContent和LastHttpContent消息,以及对应的转为字节;HttpServerCodec负责服务端中将字节码解析成HttpResponse、HttpContent和LastHttpContent消息,以及对应的将它转为字节
HttpServerCodec 里面组合了HttpResponseEncoder和HttpRequestDecoder图片
HttpClientCodec 里面组合了HttpRequestEncoder和HttpResponseDecoder
- HttpObjectAggregator: 负责将http聚合成完整的消息,而不是原始的多个部分
- HttpContentCompressor和HttpContentDecompressor:HttpContentCompressor用于服务器压缩数据,HttpContentDecompressor用于客户端解压数据
- IdleStateHandler:链接空闲时间过长,触发IdleStateEvent事件
- ReadTimeoutHandler:指定时间内没有收到任何的入站数据,抛出ReadTimeoutException异常,并关闭channel
- WriteTimeoutHandler:指定时间内没有任何出站数据写入,抛出WriteTimeoutException异常,并关闭channel
- DelimiterBasedFrameDecoder:使用任何用户提供的分隔符来提取帧的通用解码器
- FixedLengthFrameDecoder:提取在调用构造函数时的定长帧
- ChunkedWriteHandler:将大型文件从文件系统复制到内存【DefaultFileRegion进行大型文件传输】