Netty實現資料格式轉換的方式是繼承實現ByteToMessageDecoder和MessageToByteEncoder。
ByteToMessageDecoder繼承ChannelInboundHandlerAdapter
MessageToByteEncoder繼承ChannelOutboundHandlerAdapter
ByteToMessageDecoder在資料流轉過程中承擔角色如下所示:
MessageToByteEncoder在資料流轉過程中承擔角色如下所示:
-
如果需要做資料格式的轉換,可以使用MessageToMessageDecoder和MessageToMessageEncoder;
-
如果需要處的ByteBuf太長,可以丟擲TooLongFrameException;
-
如果需要一個類實現編碼和解碼可以對應實現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進行大型檔案傳輸】