Stories

Detail Return Return

Netty源碼-業務流程之構建連接 - Stories Detail

Netty基本介紹,參考 https://juejin.cn/post/7408844429370834954

1、Netty構建連接

構建連接的流程

1.1 我們知道客户端連接服務端都是通過NioEventLoop來處理請求,NioEventLoop是一個線程,連接進來首先進入run()方法。

所以我們需要啓動服務端,然後再啓動客户端發起連接,我們在run()方法打個斷點看一下。
從run()方法進入processSelectedKeys方法,如下圖:
processSelectedKeys有一個優化,在selectedKeys為空的時候,調用Optimized方法,這個方法做了優化,性能更好,我們進入Optimized方法

1.2 processSelectedKeysOptimized

首先看key關聯的是否是AbstractNioChannel,進入processSelectedKey

1.3 NioEventLoop#processSelectedKey

readyOps是什麼?
是key當前需要處理的事件(READ、WRITE、CONNECT、ACCEPT)

1.4 當readyOps=16(10000)的時候,處理READ和ACCEPT事件

如下圖,此時的unsafe是AbstractNioMessageChannel$NioMessageUnsafe類,進入其read方法

1.5 進入AbstractNioMessageChannel.NioMessageUnsafe#read

(AbstractNioMessageChannel <---繼承自--- NioServerSocketChannel),繼續進入doReadMessages方法

1.6 doReadMssages,這裏面創建鏈接,繼續進入accept

1.7 accept創建連接並返回SocketChannel,這裏調用了JDK的方法

這裏建立連接,並返回SocketChannel

總結

從前面的源碼分析文章我們知道NioEventLoop是處理請求的線程,通過Selector獲取事件,當它收到READ、ACCEPT事件的時候會去構建連接,通過JDK構建連接。

Add a new Comments

Some HTML is okay.