1. 程式人生 > >Netty(五):ServerBootstrap啟動流程

Netty(五):ServerBootstrap啟動流程

handle ops pipe 簡單的 inf and acc rest 時也

這篇文章主要是對ServerBootstrap啟動流程做一個梳理,方便我們串聯起各個類,同時也對主要的一些類有個大概的印象,方便之後逐個類的深入學習。

本篇文章不在具體貼出代碼,而是對整個啟動流程畫了一個時序圖,方便我們直觀的了解各個過程,讀者可以照著時序圖,自己跟蹤一遍代碼,了解整個過程。

技術分享圖片

參照上面的流程圖,我們對整個啟動過程做一個簡單的概括。

啟動流程大概可以分為三個步驟:初始化,註冊,綁定。

1).初始化主要的過程:創建Channel對象,為Channel配置屬性及選項,添加對應的handler。

2).註冊的主要過程:將channel與eventLoop綁定;調用內部封裝的ServerSocketChannel註冊interestOps;註冊完成後,調用pipeline產生對應的事件(fireChannelRegister,以及可能的Actived事件)

3).綁定的主要過程:調用內部封裝的ServerSocketChannel綁定端口,綁定成功後(fireChannelActived)

同時我在看代碼的時候,也有一些問題仍然沒有頭緒:

問題1:ServerSocketChannel註冊的interestOps為何是0?我們知道SelectionKey中OP_READ為1;OP_WRITE為2;OP_CONNECT為3;OP_ACCEPT為4。那註冊0表示什麽意思?

問題2:了解NIO的同學應該知道,ServerSocketChannel應該在註冊對應Connect或是Accept之類的事件,然後在有連接時,產生SocketChannel,那麽Netty是在何處實現這部分的操作的?

這些問題希望能在日後更深入的學習Netty的過程中了解答案。同時,如果有了解Netty的同學知道上面的問題,也請幫忙解惑。

Netty(五):ServerBootstrap啟動流程