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 便可。
異步

相關文章
相關標籤/搜索