底層原理源碼是開發(fā)者進階架構師必經(jīng)之路,今天來看?.NETty的核心構成塊都是什么。
1、Channel
在JAVA NIO就有這個,其實就是java NIO的基本構造。他代表到一個實體(比如一個硬件,一個文件等)
目前可以把它看作是傳入和傳出數(shù)據(jù)的載體。因此它可以打開或者關閉,連接或者斷開
2、Callback(回調(diào))
可以從名稱中來進行理解,回調(diào)就是一個方法,一個指向已經(jīng)被提供給另一個方法的引用,比如在一個操作完成后需要通知相關信息常用方式之一
Netty在內(nèi)部使用了回調(diào)來處理事件;當一個回調(diào)被觸發(fā)時,相關的事件被interface-ChannnelHandler的實現(xiàn)處理。
3、Future
該類提供了進入異步任務時,可以通過該類將在未來的某個時刻完成的任務,并提供對其結果的訪問
JDK中預置了該類interface java.util.concurrent.Future,但是所提供的實現(xiàn),只允許手動檢查對應操作是否完成,或者一直阻塞直到異步任務結束獲取到結果,這么索呢?就是非常繁瑣,所以Netty提供了對它的實現(xiàn)ChannelFuture,用于在執(zhí)行異步操作的時候使用ChannelFuture提供了幾個額外的方法,這些方法可以使我們能夠注冊多個ChannelFutureListener實例,監(jiān)聽器回調(diào)方法為:operationComplete(),將會在對應的操作完成時被調(diào)用,然后監(jiān)聽器可以判斷該操作是否完成還是出錯了,如果出錯了還可以檢索產(chǎn)生的Throwable,簡單來說:由ChannelFureListener提供的通知機制消除了手動檢查對應的操作是否完成的必要,每個Netty的傳出都返回一個ChannelFuture,反之可得,傳入都不會阻塞,證實Netty是完全基于異步和事件驅動。