Netty實現數據格式轉換的方式是繼承實現ByteToMessageDecoder和MessageToByteEncoder。服務器
ByteToMessageDecoder繼承ChannelInboundHandlerAdapter函數
MessageToByteEncoder繼承ChannelOutboundHandlerAdapter編碼
ByteToMessageDecoder在數據流轉過程當中承擔角色以下所示:加密
MessageToByteEncoder在數據流轉過程當中承擔角色以下所示: code
-
若是須要作數據格式的轉換,能夠使用MessageToMessageDecoder和MessageToMessageEncoder;cdn
-
若是須要處的ByteBuf太長,能夠拋出TooLongFrameException;blog
-
若是須要一個類實現編碼和解碼能夠對應實現ByteToMessageCodec和MessageToMessageCodec繼承
-
若是一類實現編碼和解碼以爲耦合嚴重,能夠使用CombinedChannelDuplexHandler事件
Netty中有哪些自帶的ChannelHandler?
- SslHandler:負責對請求進行加密和解密,是放在ChannelPipeline中的第一個ChannelHandler
- HttpClientCodec和HttpServerCodec:HttpClientCodec負責將請求字節解碼爲HttpRequest、HttpContent和LastHttpContent消息,以及對應的轉爲字節;HttpServerCodec負責服務端中將字節碼解析成HttpResponse、HttpContent和LastHttpContent消息,以及對應的將它轉爲字節
HttpServerCodec 裏面組合了HttpResponseEncoder和HttpRequestDecoder圖片
HttpClientCodec 裏面組合了HttpRequestEncoder和HttpResponseDecoder
- HttpObjectAggregator: 負責將http聚合成完整的消息,而不是原始的多個部分
- HttpContentCompressor和HttpContentDecompressor:HttpContentCompressor用於服務器壓縮數據,HttpContentDecompressor用於客戶端解壓數據
- IdleStateHandler:鏈接空閒時間過長,觸發IdleStateEvent事件
- ReadTimeoutHandler:指定時間內沒有收到任何的入站數據,拋出ReadTimeoutException異常,並關閉channel
- WriteTimeoutHandler:指定時間內沒有任何出站數據寫入,拋出WriteTimeoutException異常,並關閉channel
- DelimiterBasedFrameDecoder:使用任何用戶提供的分隔符來提取幀的通用解碼器
- FixedLengthFrameDecoder:提取在調用構造函數時的定長幀
- ChunkedWriteHandler:將大型文件從文件系統複製到內存【DefaultFileRegion進行大型文件傳輸】