項目中用了netty框架,自定義瞭解碼器,由於沒有結束符,導致了channelRead0一直不會執行。既然不會被動觸發,那就需要主動觸發。不過主動觸發的是 channelRead,不是channelRead0,這點需要注意,netty提供的方法就是fireChannelRead 。有兩種寫法:
1:ctx.fireChannelRead(msg); //通過當前節點往下傳播事件
2: ctx.pipeline().fireChannelRead(msg);//通過頭節點往下傳遞事件
具體選擇哪種方法,結合實際情況考慮。我這裏Handler繼承的是SimpleChannelInboundHandler ,channelRead0不會觸發,所以需要重寫channelRead 方法。
但是,添加channelHandlerContext.fireChannelRead(out)後,再channelRead中接收到的msg是list類型,就會有轉換問題,因此我就把這句話給註釋了 ,但是可以正常運行