ChannelHandler之間處理資料格式轉換與Netty自帶的Channelhandler

爬蜥發表於2018-05-29

Netty實現資料格式轉換的方式是繼承實現ByteToMessageDecoder和MessageToByteEncoder。

ByteToMessageDecoder繼承ChannelInboundHandlerAdapter

MessageToByteEncoder繼承ChannelOutboundHandlerAdapter

ByteToMessageDecoder在資料流轉過程中承擔角色如下所示:

ChannelHandler之間處理資料格式轉換與Netty自帶的Channelhandler

MessageToByteEncoder在資料流轉過程中承擔角色如下所示:

這裡寫圖片描述

  1. 如果需要做資料格式的轉換,可以使用MessageToMessageDecoder和MessageToMessageEncoder;

  2. 如果需要處的ByteBuf太長,可以丟擲TooLongFrameException;

  3. 如果需要一個類實現編碼和解碼可以對應實現ByteToMessageCodec和MessageToMessageCodec

  4. 如果一類實現編碼和解碼覺得耦合嚴重,可以使用CombinedChannelDuplexHandler

Netty中有哪些自帶的ChannelHandler?

  1. SslHandler:負責對請求進行加密和解密,是放在ChannelPipeline中的第一個ChannelHandler
    ChannelHandler之間處理資料格式轉換與Netty自帶的Channelhandler
  2. HttpClientCodec和HttpServerCodec:HttpClientCodec負責將請求位元組解碼為HttpRequest、HttpContent和LastHttpContent訊息,以及對應的轉為位元組;HttpServerCodec負責服務端中將位元組碼解析成HttpResponse、HttpContent和LastHttpContent訊息,以及對應的將它轉為位元組

HttpServerCodec 裡面組合了HttpResponseEncoder和HttpRequestDecoder

HttpClientCodec 裡面組合了HttpRequestEncoder和HttpResponseDecoder

  1. HttpObjectAggregator: 負責將http聚合成完整的訊息,而不是原始的多個部分
  2. HttpContentCompressor和HttpContentDecompressor:HttpContentCompressor用於伺服器壓縮資料,HttpContentDecompressor用於客戶端解壓資料
  3. IdleStateHandler:連線空閒時間過長,觸發IdleStateEvent事件
  4. ReadTimeoutHandler:指定時間內沒有收到任何的入站資料,丟擲ReadTimeoutException異常,並關閉channel
  5. WriteTimeoutHandler:指定時間內沒有任何出站資料寫入,丟擲WriteTimeoutException異常,並關閉channel
  6. DelimiterBasedFrameDecoder:使用任何使用者提供的分隔符來提取幀的通用解碼器
  7. FixedLengthFrameDecoder:提取在呼叫建構函式時的定長幀
  8. ChunkedWriteHandler:將大型檔案從檔案系統複製到記憶體【DefaultFileRegion進行大型檔案傳輸】

相關文章