Netty 編碼解碼

參考來源

需要搞明白的問題

  • 1.什么是inbound和outbound
    outbound:對于socket write操作,將會從Tail--》Head依次執(zhí)行pipeline中的每個Encoder
    inbound:對于read操作,將會從Head--》Tail依次執(zhí)行Decoder

  • 2.對pipeline添加ChannelHandler的時候應(yīng)該注意什么?
    需要注意添加channelHandler的順序

  • 3.理解Netty的"異步"
    NIO,即Non Blocking IO,非阻塞IO,在JAVA中NIO的核心就是Selector機制。簡單而言,創(chuàng)建一個Socket Channel,并將其注冊到一個Selector上(多路復(fù)用器),這個Selector將會“關(guān)注”Channel上發(fā)生的IO讀寫事件,并在事件發(fā)生(數(shù)據(jù)就緒)后執(zhí)行相關(guān)的處理邏輯。對于阻塞IO,它需要在read()、write()操作上阻塞而直到數(shù)據(jù)操作完畢,但是NIO則不需要,只有當(dāng)Selector檢測到此Channel上有事件時才會觸發(fā)調(diào)用read、write操作。
    但是NIO并不是嚴格意義上的“異步IO”(Asynchronous),最大的原因就是Selector本身是阻塞的!!即selector需要通過線程阻塞的方式(其select方法)獲取底層通道的事件變更,然后獲取SelectionKey列表;那么對于“異步IO”(概念同JDK 7的AIO)在整個操作鏈路上均不需要任何阻塞(完全基于OS的IO事件),依賴基于事件驅(qū)動的Handler做數(shù)據(jù)處理。目前Netty尚沒有集成AIO的相關(guān)特性,即Netty本身為非阻塞IO框架

  • 4.關(guān)于inbound和oubound注釋圖

  • Paste_Image.png
  • 很多解釋上喜歡用這張圖,讓人費解,搞不清楚那邊是頭那邊是尾

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容