看源碼,推薦用ChannelInboundHandlerAdapter服務器
https://www.rumoss.cn/archives/183/spa
netty發送和接收數據handler處理器 主要是繼承 SimpleChannelInboundHandler 和 ChannelInboundHandlerAdapter對象
通常用netty來發送和接收數據都會繼承SimpleChannelInboundHandler和ChannelInboundHandlerAdapter這兩個抽象類,那麼這兩個到底有什麼區別呢?blog
其實用這兩個抽象類是有講究的,在客戶端的業務Handler繼承的是SimpleChannelInboundHandler,而在服務器端繼承的是ChannelInboundHandlerAdapter。繼承
最主要的區別就是SimpleChannelInboundHandler在接收到數據後會自動release掉數據佔用的Bytebuffer資源(自動調用Bytebuffer.release())。而爲什麼服務器端不能用呢,由於咱們想讓服務器把客戶端請求的數據發送回去,而服務器端有可能在channelRead方法返回前尚未寫完數據,所以不能讓它自動release。事件
handler處理器 內置 方法ip
通道激活時觸發,當客戶端connect成功後,服務端就會接收到這個事件,從而能夠把客戶端的Channel記錄下來,供後面複用資源
當收到對方發來的數據後,就會觸發,參數msg就是發來的信息,能夠是基礎類型,也能夠是序列化的複雜對象。get
channelRead執行後觸發
出錯時會觸發,作一些錯誤處理
《Netty In Action》在第2章的例子中,發現 Echo 服務端使用的ChannelHandler是 ChannelInboundHandlerAdapter ,而 Echo 客戶端使用的倒是 SimpleChannelInboundHandler 。