【Netty】Netty 入门案例分析 ( Netty 线程模型 | Netty 案例需求 | IntelliJ IDEA 项目导入 Netty 开发库 )
文章目錄
- 一、 Netty 線程模型
- 二、 Netty 案例需求
- 三、 IntelliJ IDEA 引入 Netty 包
一、 Netty 線程模型
1 . Netty 中的線程池 : Netty 中有兩組線程池 , 分別是 BossGroup 線程池 和 WorkerGroup 線程池 ;
① BossGroup 線程池 : 負(fù)責(zé)客戶端的連接 ;
② WorkerGroup 線程池 : 負(fù)責(zé)客戶端連接的數(shù)據(jù)讀寫 ;
顧名思義 , 這兩個線程池中存放線程 , 這兩個線程池是 NioEventLoopGroup 子類 , NioEventLoop 就是其中的線程 ;
2 . NIO 事件循環(huán)組 ( NioEventLoopGroup ) 簡介 :
① NioEventLoopGroup 基類 : BossGroup 和 WorkerGroup 都是 NioEventLoopGroup 的派生類 ;
② NioEventLoopGroup 作用 : 代表 NIO 事件循環(huán)組 , 這個組中有多個事件循環(huán) , 每個事件循環(huán)都是一個 NioEventLoop ;
3 . NIO 事件循環(huán) ( NioEventLoop ) 簡介 :
① NIO 事件循環(huán) ( NioEventLoop ) 本質(zhì) : 表示線程 , 在該線程中循環(huán)處理任務(wù) ;
② NIO 事件循環(huán) ( NioEventLoop ) 作用 : 每個 NIO 事件循環(huán) ( NioEventLoop ) 都有 Selector 監(jiān)聽相應(yīng)的客戶端請求事件 ;
4 . NIO 事件循環(huán)組 ( NioEventLoopGroup ) 與 NIO 事件循環(huán) ( NioEventLoop ) 對應(yīng)關(guān)系 : 在一個 NIO 事件循環(huán)組 ( NioEventLoopGroup ) 中可以有 多個 NIO 事件循環(huán) ( NioEventLoop ) , 在 Netty 中這個個數(shù)可以使用代碼指定 ;
5 . BossGroup 線程池中的線程 NioEventLoop 執(zhí)行步驟 :
① 監(jiān)聽連接 : 輪詢監(jiān)聽客戶端的 accept 連接請求事件 ;
② 處理流程 : 處理該 accept 客戶端連接事件 ;
- 建立連接 : 建立服務(wù)器與該客戶端之間的連接 ;
- 獲取通道 : 獲取 套接字通道 ( SocketChannel ) ;
- 封裝通道 : 將 SocketChannel 封裝為 NioSocketChannel ;
- 注冊通道 : 將 NioSocketChannel 注冊到 WorkerGroup 線程池中的某個 NioEventLoop 中的 Selector 上 ;
③ 任務(wù)隊列 : 處理任務(wù)隊列中的其它任務(wù) ;
6 . WorkerGroup 線程池中的線程 NioEventLoop 執(zhí)行步驟 :
① 監(jiān)聽數(shù)據(jù) : 輪詢監(jiān)聽客戶端的 讀 ( Read ) 寫 ( Write ) 數(shù)據(jù)事件 ;
② 處理流程 : 處理該 讀 ( Read ) 寫 ( Write ) 數(shù)據(jù) IO 事件 , 基于之前注冊的 NioSocketChannel 處理 IO 事件 ;
③ 任務(wù)隊列 : 處理任務(wù)隊列中的其它任務(wù) ;
7 . 管道 ( Pipeline ) : 管道 ( Pipeline ) 包含 通道 ( Channel ) , 通過 管道 ( Pipeline ) 可以獲取到對應(yīng)的 通道 ( Channel ) , 管道 ( Pipeline ) 中維護(hù)了很多 處理器 ( Handler ) ;
8 . 下圖是 Netty 的線程模型 :
二、 Netty 案例需求
需求 : 簡單的功能 ;
① 服務(wù)器端 : 監(jiān)聽 8888 端口 , 接收到客戶端消息后 , 將消息原路送回 ;
② 客戶端 : 向服務(wù)器發(fā)送 “Hello World” ;
三、 IntelliJ IDEA 引入 Netty 包
引入 Netty 包流程
1 . 打開工程結(jié)構(gòu) ( Project Structure ) 對話框 : 選擇 File 菜單 -> Project Structure 選項(xiàng) ;
2 . 選擇導(dǎo)入方式 : 選擇 Modules 選項(xiàng)卡 , 右側(cè)選擇 Dependencies 選項(xiàng)卡 , 選擇右側(cè)的加號 , 點(diǎn)擊 2 Library… , 選擇 From Maven … 從 Maven 導(dǎo)入 Netty 庫 ;
3 . 搜索 Netty 庫 : 在彈出的對話框中輸入 io.netty:netty-all 內(nèi)容 , 然后點(diǎn)擊右側(cè)的放大鏡搜索按鈕 ( 搜索很長時間 ) , 選擇將依賴庫下載到工程的 lib 目錄下 , 同時下載源碼和文檔 ;
4 . 選擇一個 Netty 版本 : 選擇一個 Netty 版本 , 然后點(diǎn)擊 OK 按鈕 , 開始下載 , 下載速度很慢 ;
點(diǎn)擊 OK 按鈕后 , 開始下載 , 下載幾十分鐘 , 慢慢等 ;
5 . 配置庫 : 下載完成后 , 會彈出 Configure Library 界面 , 下面的 3 個 jar 包都選擇上 , 點(diǎn)擊 OK , 就會在目錄下生成 lib 目錄 , 該目錄下有 Netty 相關(guān)的依賴庫 , 文檔 , 源碼 等內(nèi)容 ;
6 . Netty 庫 : 工程目錄下的 lib 目錄中存放著 Netty 的依賴庫 , 文檔 , 源碼 ;
總結(jié)
以上是生活随笔為你收集整理的【Netty】Netty 入门案例分析 ( Netty 线程模型 | Netty 案例需求 | IntelliJ IDEA 项目导入 Netty 开发库 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Netty】主从反应器 ( React
- 下一篇: 【Netty】Netty 入门案例分析