netty系列二 netty常用内置Handler

netty常用内置Handler

IdleStateHandler

new IdleStateHandler(this.readerIdleTime, this.writerIdleTime, this.allIdleTime, this.timeUnit))
readerIdleTime 读取时间
writerIdleTime 写时间
timeUnit 读+写总共时间
根据你设置的超时参数的类型和值,循环去检测channelRead和write方法多久没有被调用了,如果这个时间超过了你设置的值,那么就会触发对应的事件,read触发read,write触发write,all触发all

netty粘包处理/netty 解码器

netty提供了多种编码器用于处理半包,这些编码器包含

LineBasedFrameDecoder 时间解码器
DelimiterBasedFrameDecoder 分隔符解码器
FixedLengthFrameDecoder 定长解码器

ChunkedWriteHandler

ChunkedWriteHandler异步写大型数据流,不会导致大量内存消耗
在这里插入图片描述

impleChannelInboundHandler和ChannelInboundHandlerAdapter

在客户端的业务Handler继承的是SimpleChannelInboundHandler,而在服务器端继承的是ChannelInboundHandlerAdapter。

最主要的区别就是SimpleChannelInboundHandler在接收到数据后会自动release掉数据占用的Bytebuffer资源(自动调用Bytebuffer.release())。而为何服务器端不能用呢,因为我们想让服务器把客户端请求的数据发送回去,而服务器端有可能在channelRead方法返回前还没有写完数据,因此不能让它自动release。

ByteToMessageDecoder

其核心将接收的byte转换为用户定义的mssage, 用户需要 实现 decode方法,完成具体的转换。
主要完成两个事件
1)解码(byte 转成object)
2) 下一个handler
将转换后的信息传递到下一个handler, 通过ctx.fireChannelRead

补充

序列化和反序列化 也叫 编码与解码

参考

netty常用内置Handler
DelimiterBasedFrameDecoder 自定义分隔符解码器,解决 TCP 粘包