ChannelInboundHandlerAdapter, SimpleChannelInboundHandler區別和優缺點


看源碼,推薦用ChannelInboundHandlerAdapter

https://www.rumoss.cn/archives/183/

https://stackoverflow.com/questions/36075855/multiple-channelinboundhandleradapters-in-netty-pipleline

netty發送和接收數據handler處理器 主要是繼承 SimpleChannelInboundHandler 和 ChannelInboundHandlerAdapter

  一般用netty來發送和接收數據都會繼承SimpleChannelInboundHandler和ChannelInboundHandlerAdapter這兩個抽象類,那么這兩個到底有什么區別呢?

  其實用這兩個抽象類是有講究的,在客戶端的業務Handler繼承的是SimpleChannelInboundHandler,而在服務器端繼承的是ChannelInboundHandlerAdapter

  最主要的區別就是SimpleChannelInboundHandler在接收到數據后會自動release掉數據占用的Bytebuffer資源(自動調用Bytebuffer.release())。而為何服務器端不能用呢,因為我們想讓服務器把客戶端請求的數據發送回去,而服務器端有可能在channelRead方法返回前還沒有寫完數據,因此不能讓它自動release。

handler處理器 內置 方法

channelActive

通道激活時觸發,當客戶端connect成功后,服務端就會接收到這個事件,從而可以把客戶端的Channel記錄下來,供后面復用

channelRead

當收到對方發來的數據后,就會觸發,參數msg就是發來的信息,可以是基礎類型,也可以是序列化的復雜對象。

channelReadComplete

channelRead執行后觸發

exceptionCaught

出錯時會觸發,做一些錯誤處理

 《Netty In Action》在第2章的例子中,發現 Echo 服務端使用的ChannelHandler是 ChannelInboundHandlerAdapter ,而 Echo 客戶端使用的卻是 SimpleChannelInboundHandler 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM