這篇文章主要是對ServerBootstrap啓動流程作一個梳理,方便咱們串聯起各個類,同時也對主要的一些類有個大概的印象,方便以後逐個類的深刻學習。html
本篇文章不在具體貼出代碼,而是對整個啓動流程畫了一個時序圖,方便咱們直觀的瞭解各個過程,讀者能夠照着時序圖,本身跟蹤一遍代碼,瞭解整個過程。oop
清晰大圖點此。學習
參照上面的流程圖,咱們對整個啓動過程作一個簡單的歸納。rest
啓動流程大概能夠分爲三個步驟:初始化,註冊,綁定。htm
1).初始化主要的過程:建立Channel對象,爲Channel配置屬性及選項,添加對應的handler。對象
2).註冊的主要過程:將channel與eventLoop綁定;調用內部封裝的ServerSocketChannel註冊interestOps;註冊完成後,調用pipeline產生對應的事件(fireChannelRegister,以及可能的Actived事件)blog
3).綁定的主要過程:調用內部封裝的ServerSocketChannel綁定端口,綁定成功後(fireChannelActived)事件
同時我在看代碼的時候,也有一些問題仍然沒有頭緒:ip
問題1:ServerSocketChannel註冊的interestOps爲什麼是0?咱們知道SelectionKey中OP_READ爲1;OP_WRITE爲4;OP_CONNECT爲8;OP_ACCEPT爲16。那註冊0表示什麼意思?get
問題2:瞭解NIO的同窗應該知道,ServerSocketChannel應該在註冊對應Connect或是Accept之類的事件,而後在有鏈接時,產生SocketChannel,那麼Netty是在何處實現這部分的操做的?
回答見Netty學習系列六。