Netty源码解析SimpleChannelInboundHandler

1 ChannelInboundHandlerAdapter

ChannelInboundHandlerAdapter直接操做byte数组。
ChannelInboundHandlerAdapter 好像一无可取,毕竟他要本身处理资源的释放java

buf.release();

若是channelRead都是同步操做,SimpleChannelInboundHandler是不错的选择,若是操做是异步的话,那他的逻辑就有点麻烦了,例如你把数据交给另外的线程处理了,还没处理就会释放了 。这里必须说明一个问题,他的回收和jvm的垃圾回收还不彻底是一回事。netty是本身作了引用计数的操做。api

buf.refCnt();

经过上面的api就能够获取到计数的个数。ChannelInboundHandlerAdapter 处理自由的优势也就提现出来了,能够更好的处理更多的特定场景。数组

因此ChannelInboundHandlerAdapter 的好处则是更自由,在异步的场景下更适合。markdown

2 SimpleChannelInboundHandler
  • SimpleChannelInboundHandler有泛型参数,配合decoder使用更佳。

    SimpleChannelInboundHandler主要还多作了类型匹配以及用完以后释放指向保存该消息的 ByteBuf 的内存引用。

    SimpleChannelInboundHandler的好处是能够处理不一样的类型对象,而且能够作释放。

那么源码中可见若是对于不接受的消息类型,else分支也会释放内存吗?让咱们直接看 tailContext 便可。
异步

相关文章
相关标签/搜索