1. 程式人生 > 其它 >Netty原始碼研究筆記(2)——Bootstrap系列

Netty原始碼研究筆記(2)——Bootstrap系列

1. Netty原始碼研究筆記(2)——Bootstrap系列

顧名思義,Bootstrap是netty提供給使用者的腳手架,類似於Spring的ApplicationContext,通過Bootstrap我們使用一些自定義選項,將相關的元件打包起來,從而快速的啟動伺服器、客戶端。

Bootstrap分為:BootstrapServerBootstrap兩種,其中前者用於構建客戶端、後者用於構建服務端。

Bootstrap的實現使用的是典型的建造者模式,使用這種模式的好處是使得構造物件時可讀性更好,更不容易出錯(相比於使用建構函式而言),並且可以在構造的時候進行校驗。

Bootstrap系列還包含相關的BootstrapConfig

BootstrapConfig的實現類似外觀模式,只暴露其內部持有Bootstrap的配置資訊。(配置資訊實際放在Bootstrap中)。

1.1. 繼承關係

1.2. AbstractBootstrap

注意:bind方法定義在AbstractBoostrap中。

在使用點對點的傳輸時,一般在Server端使用bind,在Client端使用connect

如果bind方法不是通過ServerBootstrap使用,那麼對應的是無連線的傳輸場景,比如:UDP。

AbstractBootstrap是一個泛型類,它的泛型引數是其實現類,這樣便可以使其鏈式呼叫方法返回的型別其具體的實現類。

忽略EMPTY_OPTION_ARRAY

EMPTY_ATTRIBUTE_ARRAY,這兩者用於提供泛型方法的型別入參,從而指示其返回型別,沒有實際意義。

我們可以看到在AbstractBootstrap中需要配置:

  • 關聯的EventLoopGroup(必選)
  • 監聽的local socket address:對於端到端的server必選,對於無連線的也必選
  • channel handler:必選,一般是channel initializer,負責將需要的channel handler新增到channel pipeline中。
  • channel option(可選)
  • channel attribute(可選)
  • channel factory:一般使用預設的channel factory,它使用反射機制來建立channel

bindconnect方法在前文已經分析過了,這裡我們看未談到的validateinit方法。

validate

AbstractBootstrap只校驗了EventLoopGroup

init

子類中實現。

1.3. ServerBootstrap

ServerBootstrap需要配置:

  • child channel option:可選,表示和客戶端建立的傳輸通道的配置項。
  • child channel attibute:可選,表示和客戶端建立的傳輸通道的屬性項。
  • child channel handler:必填,一般是channel initializer,表示對客戶端請求的處理邏輯
  • child event loop group:可選,表示客戶端請求處理器的執行執行緒組。

validate

校驗child channel handler

init

ServerBootstrap::init方法給channel pipeline 新增使用者指定的channel handler,以及一個ServerBootstrapAcceptor型別的channel handler,它使得服務端可以和客戶端建立端到端的連線。

ServerBootstrapAcceptor以後再談。

1.4. Bootstrap

validate

驗證channel handler是否存在,即判斷對server的response的處理器是否定義了。

init

給channel pipeline新增使用者指定的channel handler。

1.5. AbstractBootstrapConfig、ServerBootstrapConfig、BootstrapConfig

AbstractBootstrapConfig

ServerBootstrapConfig

BootstrapConfig