【Netty系列】核心概念

目錄

1. EventLoop 與線程模型

2. Channel(通道)

3. ChannelHandler 與 Pipeline

4. ByteBuf(數據容器)

5. Bootstrap 與 ServerBootstrap

6. Future 與 Promise

7. 其他核心概念

總結


Netty 是一個高性能、異步事件驅動的網絡框架,其核心設計思想基于 Reactor 模式責任鏈模式。以下是 Netty 框架的核心概念及其作用:


1. EventLoop 與線程模型

  • EventLoop
    是 Netty 的核心調度單元,負責處理 I/O 事件(如讀/寫)、用戶任務(如 Runnable)和定時任務。
    • 每個 EventLoop 綁定一個線程,避免線程競爭。
    • 一個 EventLoop 可以管理多個 Channel(通過輪詢)。
  • 線程模型
    • 單線程模型:所有事件和任務由單個 EventLoop 處理(僅適用于簡單場景)。
    • 多線程模型:一個 EventLoopGroup 包含多個 EventLoop,每個 EventLoop 獨立處理事件(默認推薦)。
    • 主從多線程模型:主 EventLoopGroup 處理連接,子 EventLoopGroup 處理 I/O(常用于服務端)。

2. Channel(通道)

  • 概念
    Channel 是對網絡連接(如 TCP/UDP)的抽象,類似于 Java NIO 的 SocketChannel,但功能更強大。
  • 核心方法
channel.read();      // 讀取數據
channel.write();     // 寫入數據
channel.connect();   // 建立連接
  • 實現類
    • NioSocketChannel:基于 NIO 的客戶端 TCP 通道。
    • NioServerSocketChannel:基于 NIO 的服務端監聽通道。
    • 其他傳輸:如 EpollChannel(Linux 原生)、LocalChannel(本地傳輸)。

3. ChannelHandler 與 Pipeline

  • ChannelHandler
    處理 I/O 事件或攔截操作的核心組件,需實現以下接口之一:
    • ChannelInboundHandler:處理入站事件(如數據到達、連接建立)。
    • ChannelOutboundHandler:處理出站事件(如數據寫出、連接關閉)。
  • Pipeline(責任鏈)
    將多個 ChannelHandler 串聯成鏈,數據按順序流動。
pipeline.addLast("decoder", new StringDecoder()); // 解碼器
pipeline.addLast("encoder", new StringEncoder()); // 編碼器
pipeline.addLast("handler", new CustomHandler()); // 業務邏輯
  • 常用 Handler
    • ByteToMessageDecoder:字節流解碼為對象。
    • MessageToByteEncoder:對象編碼為字節流。
    • LoggingHandler:日志記錄。

4. ByteBuf(數據容器)

  • 特點
    • 替代 Java NIO 的 ByteBuffer,提供更靈活的內存管理。
    • 支持 池化(減少 GC)、引用計數(自動釋放)、讀寫索引分離
  • 操作示例
ByteBuf buf = Unpooled.buffer(1024);
buf.writeInt(100);       // 寫入數據
int value = buf.readInt(); // 讀取數據
buf.release();           // 手動釋放(若未池化)

5. Bootstrap 與 ServerBootstrap

  • 作用
    用于配置客戶端和服務端的啟動參數。
  • 客戶端(Bootstrap)
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(eventLoopGroup).channel(NioSocketChannel.class).handler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) {ch.pipeline().addLast(new ClientHandler());}});
  • 服務端(ServerBootstrap)
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) {ch.pipeline().addLast(new ServerHandler());}});

6. Future 與 Promise

  • ChannelFuture
    表示異步 I/O 操作的結果,可通過 addListener() 監聽完成事件:
ChannelFuture future = channel.write(msg);
future.addListener((ChannelFutureListener) f -> {if (f.isSuccess()) {System.out.println("Write success");} else {f.cause().printStackTrace();}
});
  • Promise
    可手動設置結果的 Future,用于自定義異步邏輯。

7. 其他核心概念

  • 編解碼器(Codec)
    ProtobufEncoder/DecoderHttpServerCodec,用于協議解析。
  • 心跳機制
    通過 IdleStateHandler 檢測空閑連接。
  • SSL/TLS 支持
    使用 SslHandler 實現加密通信。
  • 零拷貝(Zero-Copy)
    通過 FileRegion 直接傳輸文件,減少內存復制。

總結

Netty 的核心設計目標是 高吞吐、低延遲、易擴展,通過事件驅動模型和高效的線程管理實現高性能。理解這些核心概念后,可以基于 Netty 輕松構建 TCP/UDP 服務器、HTTP 服務、RPC 框架等復雜網絡應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907778.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# Costura.Fody 排除多個指定dll

按照網上的說在 FodyWeavers.xml 里修改 然后需要注意的是 指定多個排除項 不是加 | 是換行 一個換行 就排除一項 我測試的 <?xml version"1.0" encoding"utf-8"?> <Weavers xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…

C++基礎算法————廣度優先搜索(BFS)

一、引言 在計算機科學中,搜索算法是解決各種問題的關鍵工具之一。廣度優先搜索(Breadth-First Search,簡稱BFS)作為其中一種重要的搜索算法,以其獨特的搜索策略和廣泛的應用場景,在眾多領域發揮著重要作用。對于初學者來說,深入理解和掌握BFS算法是提升編程能力、解決…

關于Web安全:7. WebShell 管理與持久化后門

一、菜刀馬 菜刀馬&#xff08;ChinaZ WebShell&#xff09; 是一種與“中國菜刀&#xff08;ChinaZ&#xff09;”客戶端配合使用的 WebShell 木馬&#xff0c;廣泛應用于 Web 滲透測試中&#xff0c;主要使用 PHP/ASP/JSP 等語言編寫。 它的本質是一個一句話木馬&#xff0…

【仿生系統】qwen的仿生機器人解決方案

收到完整需求后&#xff0c;我將從系統架構設計、算法實現路徑、訓練方法三個維度為您構建完整的仿生機器人解決方案。以下是分階段實施方案&#xff1a; 一、核心系統架構設計&#xff08;模塊化可進化架構&#xff09; 1. 多模態感知引擎 - 視覺子系統&#xff1a;YOLOv8SAM…

Tomcat- AJP協議文件讀取/命令執行漏洞(幽靈貓復現)詳細步驟

一、漏洞描述 Apache Tomcat是由Apache軟件基金會屬下Jakarta項目開發的Servlet容器.默認情況下,Apache Tomcat會開啟AJP連接器,方便與其他Web服務器通過AJP協議進行交互.但Apache Tomcat在AJP協議的實現上存在漏洞,導致攻擊者可以通過發送惡意的AJP請求,可以讀取或者包含Web應…

IEEE P370:用于高達 50 GHz 互連的夾具設計和數據質量公制標準

大多數高頻儀器&#xff0c;如矢量網絡分析儀 &#xff08;VNA&#xff09; 和時域反射儀 &#xff08;TDR&#xff09;&#xff0c;都可以在同軸接口的末端進行非常好的測量。然而&#xff0c;復雜系統中使用的互連很少具有同軸接口。用于表征這些設備的夾具的設計和實施會對測…

OneForAll 使用手冊

OneForAll 使用手冊 一、概述 OneForAll 是一款功能強大的子域名收集工具&#xff0c;旨在幫助安全測試人員和網絡管理員全面發現目標域名的所有子域名&#xff0c;為后續的安全評估和漏洞測試提供基礎支持。它集成了多種子域名發現方法&#xff0c;包括搜索引擎查詢、DNS 枚…

從前端工程化角度解析 Vite 打包策略:為何選擇 Rollup 而非 esbuild。

文章目錄 前言一、esbuild 與 Rollup 的技術特性對比&#xff08;一&#xff09;esbuild&#xff1a;極速開發利器&#xff0c;功能尚待完善&#xff08;二&#xff09;Rollup&#xff1a;專業打包工具&#xff0c;功能全面強大 二、Vite 打包策略的工程化考量因素&#xff08;…

Chrome 通過FTP,HTTP 調用 Everything 瀏覽和搜索本地文件系統

【提問1】 Chrome調用本地 everything.exe, everything 好像有本地 FTP 服務器&#xff1f; 【DeepSeek R1 回答】 是的&#xff0c;Everything 確實內置了 HTTP/FTP 服務器功能&#xff0c;這提供了一種相對安全的瀏覽器與本地應用交互的方式。以下是完整的實現方案&#x…

Java八股文智能體——Agent提示詞(Prompt)

這個智能體能夠為正在學習Java八股文的同學提供切實幫助&#xff1a;不僅可以幫你優化答案表述&#xff0c;還能直接解答八股文相關問題——它會以面試者的視角&#xff0c;給出貼合求職場景的專業回答。 將以下內容發送給任何一個LLM&#xff0c;他會按照你提示詞的內容&…

Android 緩存應用凍結器(Cached Apps Freezer)

一、核心功能與原理 1. 功能概述 目標&#xff1a;通過凍結后臺緩存應用的進程&#xff0c;減少其對 CPU、內存等系統資源的消耗&#xff0c;優化設備性能與續航。適用場景&#xff1a;針對行為不當的后臺應用&#xff08;如后臺偷偷運行代碼、占用 CPU&#xff09;&#xff…

內存管理 : 06 內存換出

內存換出的重要性及與換入的關系 現在我們講第25講&#xff0c;主題是內存的換出&#xff08;swipe out&#xff09;。實際上&#xff0c;上一講我們講的是內存的換入&#xff0c;而這一節聚焦于內存的換出。 換入和換出必須合在一起工作&#xff0c;不能只有換入而沒有換出。…

第一節 51單片機概述

目錄 一、單片機系統組成 &#xff08;一&#xff09;、單片機硬件系統 &#xff08;二&#xff09;單片機的軟件系統 二、STC89C52單片機 &#xff08;1&#xff09;、基本信息 &#xff08;2&#xff09;、命名規則 &#xff08;3&#xff09;、單片機內部結構圖 &am…

前端面試準備-4

1.React Router的history模式中&#xff0c;push和replace有什么區別 都是用于頁面導航&#xff0c;但是他們對瀏覽器歷史記錄的處理不一樣。 ①&#xff1a;push是在瀏覽歷史棧里加入一條新的瀏覽歷史&#xff0c;點擊返回鍵會返回上一個頁面 ②;replace是替換當前歷史記錄…

【機器學習基礎】機器學習入門核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)

機器學習入門核心&#xff1a;Jaccard相似度 &#xff08;Jaccard Index&#xff09; 和 Pearson相似度 &#xff08;Pearson Correlation&#xff09; 一、算法邏輯Jaccard相似度 (Jaccard Index)**Pearson相似度 (Pearson Correlation)** 二、算法原理與數學推導1. Jaccard相…

Unity3D仿星露谷物語開發57之保存庫存信息到文件

1、目標 保存下面庫存欄中信息到文件中。 2、修改SceneSave.cs腳本 添加2行代碼&#xff1a; 3、修改InventoryManager對象 添加Generate GUID組件。 4、修改InventoryManager.cs腳本 添加繼承自ISaveable 添加屬性信息&#xff1a; private string _iSaveableUniqueID;pub…

測量3D翼片的距離與角度

1&#xff0c;目的。 測量3D翼片的距離與角度。說明&#xff1a; 標注A 紅色框選的區域即為翼片&#xff0c;本示例的3D 對象共有3個翼片待測。L1與L2的距離、L1與L2的角度即為所求的翼片距離與角度。 2&#xff0c;原理。 使用線結構光模型&#xff08;標定模式&#xff0…

深入理解 SQL 的 JOIN 查詢:從基礎到高級的第一步

在處理數據庫時&#xff0c;我們常常需要從多個表中提取數據。比如想知道一個城市的天氣情況&#xff0c;同時又想知道這個城市的具體位置。這就需要將 weather 表和 cities 表結合起來查詢。這種操作在 SQL 中被稱為 JOIN 查詢。 現在看下兩種表的情況 1.weather 表&#xff…

上傳頭像upload的簡易方法,轉base64調接口的

1.首頁使用el-image顯示數據&#xff0c;用的是轉base64后端返給的 <el-table-column prop"avatar" align"center" label"頭像"><template #default"scope"><el-image style"height: 40px;width: 40px;" :sr…

[AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT

QA QA攻擊者可以濫用 vssadmin 實用程式來建立卷影快照&#xff0c;然後提取 NTDS.dit 等敏感檔案來繞過安全機制。確定卷影複製服務進入運作狀態的時間。2024-05-14 03:42:16建立卷影快照時&#xff0c;磁碟區複製服務會使用機器帳戶驗證權限並列舉使用者群組。找到卷影複製過…