SimpleChannelInboundHandler与ChannelInboundHandlerAdapter的区别

anjingsi 1年前 ⋅ 600 阅读

SimpleChannelInboundHandler与ChannelInboundHandlerAdapter的区别

SimpleChannelInboundHandler

public abstract class SimpleChannelInboundHandler<I> extends ChannelInboundHandlerAdapter 

在Netty中客户端的Handler一般继承SimpleChannelInboundHandler抽象类 SimpleChannelInboundHandler在接收到数据后会自动 release掉数据占用的 Bytebuffer资源(自动调用Bytebuffer.release())。而为何服务器端不能用呢,因为我们想让服务器把客户端请求的数据发送回去,而 write() 操作是异步的,而服务器端有可能在channelRead方法返回后还没有写完数据,因此不能让它自动release SimpleChannelInboundHandler 是有泛型参数的。可以指定一个具体的类型参数,通过 decoder配合使用,非常方便

ChannelInboundHandlerAdapter

public class ChannelInboundHandlerAdapter extends ChannelHandlerAdapter implements ChannelInboundHandler 

服务端Handler一般继承ChannelInboundHandlerAdapter抽象类 ChannelInboundHandlerAdapter是ChannelInboundHandler一个简单实现,默认情况下不会做任何处理。只是简单的将操作通过fire方法传到ChannelPipeline中的下一个ChannelHandler中让链中的下一个ChannelHandler去处理。 但是需要注意的是信息经过channelRead方法处理之后不会自动释放(是因为信息不会被自动释放所以能将信息传给下一个ChannelHandler处理。其次,在实现类Handler中,你仍然需要将传入消息回送给发送者,而 write() 操作是异步的,直到 channelRead() 方法返回后可能仍然没有完成。为此,实现类Handler扩展了 ChannelInboundHandlerAdapter ,其在这个时间点上不会释放消息。) 可以处理不同的类型对象,并且可以做释放 更自由,在异步的场景下更适合


全部评论: 0

    我有话说: