原创 netty源碼分析(17)- 新連接接入處理邏輯總結

前面的學習從12到第16節都是圍繞新連接接入的代碼來學習,本節做一個總結。 檢測新連接:netty在服務端channel也就是綁定的NioEventLoop,bossGroup中輪詢到accept事件 創建NioSocketChann

原创 netty源碼分析(15)- 新連接NioEventLoop分配和Selector註冊

上一節總結了channel代碼的架構,瞭解了從鼎城channel接口的定義以及一層一層最後區分開客戶端channel和服務端channel。從中也可以體會到抽象和集成的特點。 本節回顧一下在服務端啓動初始化的時候ServerBootstra

原创 netty源碼分析(16)- 新連接NioSocketChannel向Selector註冊讀事件

上一節最後提到新連接接入過程當中,最後一步是註冊Selector,其註冊過程和之前的章節《註冊selector》類似,但是讀事件,卻又有區別。 入口:ServerBootstrap.ServerBootstrapAcceptor#chann

原创 netty源碼分析(14)- channel代碼架構總結

上一節學習客戶端channel的創建過程。至此,客戶端和服務端的創建過程我們都學習了一般。 本節總結一下channel的分類。經過簡化後得如下UML 頂層Channel接口定義了socket事件如讀、寫、連接、綁定等事件,並使用Abst

原创 netty源碼分析(13)- 創建NioSocketChannel

上一節研究了新連接接入的過程,通過檢測IO事件輪詢新連接,當前成功檢測到連接接入事件之後,會調用NioServerSocketChannel#doReadMessages()方法,進行創建NioSocketChannel @Overrid

原创 netty源碼分析(12)- 新連接接入

在研究NioEventLoop執行過程的時候,檢測IO事件(包括新連接),處理IO事件,執行所有任務三個過程。其中檢測IO事件中通過持有的selector去輪詢事件,檢測出新連接。這裏複用同一段代碼。 今天我們研究的新連接介入的過程大概如下

原创 netty源碼分析(8)-NioEventLoop執行過程

上一節我們研究了NioEventLoop創建過程,概括起來就是,通道channel獲取NioEventLoop實例,調用execute()方法,用ThreadPerTaskExecutor執行器,開啓一個線程,去執行NioEventLoop

原创 netty源碼分析(7)-NioEventLoop啓動過程

上一節,我們研究了NioEventLoop的創建過程,其實也就是做了一些初始化,把該準備的準備好了。重點有兩個 準備了一個ThreadPerTaskExecutor,以後添加的task,每次執行的時候其實是實例化了了一個netty自定義的

原创 netty源碼分析(11)-NioEventLoop總結

前面花了5節的篇幅來學習和研究NioEventLoop的創建,啓動,執行的過程。總結一下 用戶代碼再創建boosGroup和workGroup的時候,NioEventLoop被創建,默認不穿參數的時候,創建2倍CPU核心數的NioEven

原创 netty源碼分析(9)-NioEventLoop執行過程之select()

上一節我們研究了NioEventLoop的執行過程,但是select(wakenUp.getAndSet(false));和processSelectedKeys();沒有分析。 這一節研究select(),改方法乾的事情其實是輪詢檢查IO

原创 netty源碼分析(10)-NioEventLoop執行之processSelectedKeys()

前節我們分析了runAllTask()s和select(),前者是執行NioEventLoop持有得任務隊列中所有得任務,後者是輪詢檢測IO事件得發生。 本節研究processSelectedKeys():處理IO事件 我們直到處理IO事件

原创 netty源碼分析(6)-NioEventLoop創建過程

前面幾章,在我們分析的時候註冊Selector相關代碼的時候,提到過一部分NioEventLoop的創建過程。接下來詳細分析。new NioEventLoopGroup(); public NioEventLoopGroup(int

原创 netty源碼分析-註冊Selector

前面幾節我們分析了Channel的創建和初始化過程,都是集中在AbstractBootstrap#initAndRegister方法。在newChannel()和init(channel)之後,接着的是便是註冊 ChannelFuture

原创 netty源碼分析-AbstractBootstrapConfig

上一節分析了初始化Channel的過程,其中涉及了AbstractBootstrap及其子類的成員變量配置以及初始化過程。其中初始化具體Bootstrap的時候有這麼一個成員變量,用於存儲Bootstrap的配置信息。 private fi

原创 netty源碼分析-Channel創建過程

初始化入口:bind()/connect()方法 ChannelFuture future = serverBootstrap.bind(PORT).sync(); ChannelFuture future = bootstrap.c