天天看點

源碼解析:ServerBootStrap 啟動的背後,Netty 到底完成了哪些工作?

引言

在 Netty 的引導程式中,啟動一個服務端應用是一個十分簡單的事情。配置連結類對象,配置子類初始化

ChannelHandler

,再調用

bind

方法綁定端口号,一個服務端應用就啟動完畢了,接着隻需要等待用戶端發送連接配接請求,程式就能自動為我們完成用戶端接入。看着是很簡單的過程,Netty 在背後卻是做了相當多的工作,本文就以

ServerBootStrap

啟動的時序動作為分析入手點,剖析在引導程式啟動中,涉及到的具體代碼内容。

總體時序流程

使用

ServerBootStrap

bind

方法執行對端口的監聽,這裡面涉及到好幾個步驟,簡單而言包括有:

  • 按照給定的

    Channel

    類,執行個體化一個對象。
  • 将執行個體化的

    Channel

    對象注冊到

    EventLoop

    上。
  • 設定

    Channel

    的綁定監聽位址,并且更新

    Channel

    對象的

    SelectionKey

    的事件關注集。

整體的時序如下

源碼解析:ServerBootStrap 啟動的背後,Netty 到底完成了哪些工作?

可以看到,一個完整的初始化動作内容很多,并且很多都是委托給其他類完成,下面按照三個大步驟進行區分,來逐一分析。

初始化 Channel 對象

ServerBootStrap

使用