从目前来看,channelpipeline和channelhandler是一起来理解的。对我来说,channelpipeline就类似于一个容器,这个容器里存放的就是channelhandler。
那首先来讲下channelhandler吧。它包含两个子接口:channelinboundhandler和channeloutboundhandler,分别处理进站和出站的事务。
而channelinboundhandler一般又有channelinboundhandleradapter和simplerchannelinboundhandler,那这个是什么区别呢?
一般用netty来发送和接收数据都会继承SimpleChannelInboundHandler和ChannelInboundHandlerAdapter这两个抽象类,那么这两个到底有什么区别呢?
其实用这两个抽象类是有讲究的,在客户端的业务Handler继承的是SimpleChannelInboundHandler,而在服务器端继承的是ChannelInboundHandlerAdapter。
最主要的区别就是SimpleChannelInboundHandler在接收到数据后会自动release掉数据占用的Bytebuffer资源(自动调用Bytebuffer.release())。而为何服务器端不能用呢,因为我们想让服务器把客户端请求的数据发送回去,而服务器端有可能在channelRead方法返回前还没有写完数据,因此不能让它自动release。(引用
本文详细探讨了Netty中的ChannelHandler和ChannelPipeline。ChannelPipeline作为一个容器,用于存储ChannelHandler。ChannelHandler分为ChannelInboundHandler和ChannelOutboundHandler,分别处理进站和出站操作。SimpleChannelInboundHandler在接收到数据后会自动释放资源,适合客户端,而服务器端通常使用ChannelInboundHandlerAdapter,以保留数据进行回写。文章还阐述了ChannelHandler的执行顺序,客户端先执行出站再执行进站,服务器端则相反,并介绍了如何在Pipeline中添加和管理ChannelHandler。
订阅专栏 解锁全文
1330

被折叠的 条评论
为什么被折叠?



