Netty入門詳解

引言

Netty 是一個基于 Java 的高性能、異步事件驅動的網絡應用框架,用于快速開發可維護的高性能網絡服務器和客戶端。它提供了一組豐富的 API,使得開發人員能夠輕松地處理各種網絡協議,如 TCP、UDP 等,并且支持多種編解碼方式,方便與不同的應用層協議進行對接。本篇文章將詳細闡述Netty的核心概念幫助我們快速理解

?Netty 的核心概念

  • Channel:Netty 中所有的 I/O 操作都發生在Channel上,它代表了一個到實體(如硬件設備、文件、網絡套接字等)的開放連接,能夠執行讀、寫、連接、綁定等操作。
  • EventLoopEventLoop是 Netty 中處理事件的核心組件,它負責處理Channel上的所有事件,包括連接、讀、寫等操作。每個EventLoop會不斷循環,處理注冊到它上面的Channel的各種事件。
  • ChannelHandlerChannelHandler是 Netty 中處理 I/O 事件的主要方式,它可以對Channel上的事件進行攔截、處理和轉換。開發人員可以自定義ChannelHandler來實現自己的業務邏輯,比如對消息的編解碼、對業務請求的處理等。
  • ChannelPipelineChannelPipeline是一個由ChannelHandler組成的鏈,它負責管理和執行Channel上的ChannelHandler。當Channel上有事件發生時,ChannelPipeline會按照順序依次調用鏈中的ChannelHandler來處理事件。

Netty 的依賴

在 Maven 項目中,添加 Netty 的依賴:

<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.86.Final</version>
</dependency>

版本可以自己選定這是比較穩定的版本

netty-all包含所有組件可以根據自己需要細分依賴

Netty 的工作原理

  • Reactor 模型:Netty 基于 Reactor 模型實現了高性能的網絡通信。它通過一個或多個EventLoop線程來監聽Channel上的事件,當有事件發生時,將事件分發給對應的ChannelHandler進行處理。
  • 異步非阻塞 I/O:Netty 使用 Java 的異步非阻塞 I/O(NIO)技術來實現高效的網絡通信。在異步非阻塞模式下,I/O 操作不會阻塞線程,而是通過回調函數或 Future 來通知操作的結果,這樣可以大大提高系統的并發處理能力。

實戰實現Netty服務器?

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;public class NettyServer {public static void main(String[] args) throws Exception {// 用于接收客戶端連接的線程組EventLoopGroup bossGroup = new NioEventLoopGroup(1);// 用于處理客戶端連接后讀寫操作的線程組EventLoopGroup workerGroup = new NioEventLoopGroup();try {// 創建ServerBootstrap實例ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {// 這里可以添加自定義的ChannelHandler}}).option(ChannelOption.SO_BACKLOG, 128).childOption(ChannelOption.SO_KEEPALIVE, true);// 綁定端口,開始監聽ChannelFuture f = b.bind(8888).sync();// 等待服務器監聽端口關閉f.channel().closeFuture().sync();} finally {// 關閉線程組workerGroup.shutdownGracefully();bossGroup.shutdownGracefully();}}
}

上述代碼創建了一個簡單的 Netty 服務端,它監聽在 8888 端口上,當有客戶端連接時,可以在initChannel方法中添加自定義的ChannelHandler來處理客戶端的請求。

Netty 的應用場景

  • 網絡通信框架:Netty 可以作為基礎的網絡通信框架,用于開發各種網絡應用,如 HTTP 服務器、FTP 服務器、RPC 框架等。
  • 游戲服務器:在游戲開發中,Netty 可以用于開發游戲服務器,處理玩家的連接、消息收發等操作,能夠滿足游戲對高性能、高并發的要求。
  • 分布式系統:在分布式系統中,Netty 可以用于節點之間的通信,實現數據的傳輸和交互。

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

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

相關文章

物聯網簡介集合

物聯網&#xff08;IoT&#xff09;指的是物理設備&#xff08;如電器和車輛&#xff09;之間的互聯互通。這些設備嵌入了軟件、傳感器和連接功能&#xff0c;使其能夠相互連接并交換數據。這項技術實現了從龐大的設備網絡中收集和共享數據&#xff0c;為打造更高效、自動化的系…

【分布式理論11】分布式協同之分布式事務(一個應用操作多個資源):從剛性事務到柔性事務的演進

文章目錄 一. 什么是分布式事務&#xff1f;二. 分布式事務的挑戰三. 事務的ACID特性四. CAP理論與BASE理論1. CAP理論1.1. 三大特性1.2. 三者不能兼得 2. BASE理論 五. 分布式事務解決方案1. 兩階段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…

【Quest開發】全身跟蹤

軟件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最終效果&#xff1a;能像meta的操作室沉浸場景一樣根據頭盔移動來推斷用戶姿勢&#xff0c;實現走路、蹲下、手勢匹配等功能 需要借助UnityMovement這個包 GitHub …

AI全棧開發_人工智能AI大模型 Prompt提示詞工程詳解(全方位介紹及運用)

AI引領的第四次工業革命正席卷而來&#xff0c;如何精準把握這一歷史性的機遇&#xff0c;將成為我們這一代人不容忽視且需深入思考與積極行動的重要課題。未來幾年AI將會像計算機一樣快速普及&#xff0c;面對這一歷史性的第一波紅利&#xff0c;你是否已準備好把握機遇&#…

小米平板怎么和電腦共享屏幕

最近嘗試使用小米平板和電腦屏幕分屏互聯 發現是需要做特殊處理的&#xff0c;需要下載一款電腦安裝包&#xff1a;小米妙享 關于這個安裝包&#xff0c;想吐槽的是&#xff1a; 沒有找到官網渠道&#xff0c;是通過其他網絡方式查到下載的 不附錄鏈接&#xff0c;原因是因為地…

java | MyBatis-plus映射和golang映射對比

文章目錄 Java實體類和數據庫的映射1.默認駝峰命名規則2.自定義字段映射3.關閉駝峰命名規則4.JSON序列化映射 Golang1. 結構體與表的映射2. 字段與列的映射3. 關聯關系映射4. 其他映射相關標簽 這篇也是做數據庫映射方面的對比&#xff1a; Java 實體類和數據庫的映射 1.默認…

訊方·智匯云校華為官方授權培訓機構

1.官方授權 訊方智匯云校是華為領先級授權培訓機構&#xff08;華為授權培訓合作伙伴&#xff08;HALP&#xff09;體系&#xff0c;分為認證、優選、領先三個等級&#xff0c;領先級是HALP最高級&#xff09;&#xff0c;代表著華為對培訓合作伙伴在專業能力、師資隊伍、合作…

避免踩雷!CUDA與Anaconda兼容性配置完全手冊

CUDA與Anaconda深度學習環境配置指南 目錄 核心概念解析安裝場景分析版本沖突處理最佳實踐指南常見問題解答 核心概念解析 1. 組件對比表 組件作用域包含內容查看方式NVIDIA驅動系統級GPU底層通信支持nvidia-smiCUDA Toolkit系統級完整開發工具鏈(nvcc等)nvcc --versioncon…

掌握.NET Core后端發布流程,如何部署后端應用?

無論你是剛接觸.NET Core的新手還是已有經驗的開發者&#xff0c;在這篇文章中你將會學習到一系列實用的發布技巧與最佳實踐&#xff0c;幫助你高效順利地將.NET Core后端應用部署到生產環境中 目錄 程序發布操作 Docker容器注冊表 文件夾發布 導入配置文件 網站運行操作 …

一周學會Flask3 Python Web開發-request請求對象與url傳參

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili request請求對象封裝了從客戶端發來的請求報文信息&#xff0c;我們可以從中獲取所有數據。 request對象包含的常用屬性&…

2025年2月深度實測!DeepSeek、OpenAI o1、Gemini打造爆款應用及對比

我在網上看到了關于DeepSeek R1的各種說法,這是一個開源模型,其能力即便不比OpenAI o1等付費模型強,也與之相當: 由于我在日常工作中廣泛使用這些人工智能模型(使用Cursor AI),我決定看看哪種模型最適合我。 在進行了200次Cursor請求后,我將分享我的實驗結果。 一、…

OpenCV機器學習(6)樸素貝葉斯分類器(Naive Bayes Classifier)cv::ml::NormalBayesClassifier的使用

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::ml::NormalBayesClassifier 是 OpenCV 機器學習模塊中的一部分&#xff0c;用于實現樸素貝葉斯分類器&#xff08;Naive Bayes Classifier&a…

LLaVA-CoT: Let Vision Language Models Reason Step-by-Step論文解讀

文章目錄 前言一、摘要一、引言二、文獻綜述1. Visual reasoning with large language models2. Chain-of-thought in large language models3. Inference time scaling 三、方法1. Enhancing Reasoning Capability through Structured Thinking1. Reasoning Stages2. Data Pre…

Linux 和 Windows 區別

1. 文件組織 (1)目錄結構 Linux:采用**單一根目錄(/)**結構,所有文件和設備都掛載在這個目錄下。 典型目錄: /home/(用戶目錄)/etc/(配置文件)/bin/(系統可執行文件)/dev/(設備文件)/mnt/(掛載點)Windows:采用多個驅動器(C:\, D:\),每個分區是一個獨立的…

java基礎語知識(8)

類之間的關系 在類之間&#xff0c;最常見的關系有&#xff1a; 依賴&#xff08;“uses-a”&#xff09;;聚合&#xff08;“has-a”&#xff09;;繼承&#xff08;“is-a”&#xff09;。 依賴&#xff1a;一種使用關系&#xff0c;即一個類的實現需要另一個類的協助&#x…

Linux系統中常見的詞GNU是什么意思?

GNU 是 “GNU’s Not Unix” 的遞歸縮寫&#xff0c;它是一個自由軟件項目&#xff0c;旨在創建一個完全自由的操作系統。這個名字反映了GNU項目的核心理念&#xff1a;它試圖創建一個類Unix的系統&#xff0c;但不是Unix本身。 GNU 項目由 理查德斯托曼&#xff08;Richard S…

安卓burp抓包,bypass ssl pinning

好久好久沒有發東西了。主要是懶。。。 這幾天在搞apk滲透&#xff0c;遇到了burp無法抓包問題&#xff0c;覺得可以寫下來。 問題描述 1. 一臺安卓手機&#xff0c;裝了面具&#xff0c;可以拿到root 2. 電腦上有burp&#xff0c;設置代理 3.手機和電腦連同一個網段&…

抖音試水AI分身;騰訊 AI 戰略調整架構;百度旗下小度官宣接入DeepSeek...|網易數智日報

抖音試水AI分身&#xff0c;字節旗下AI智能體平臺扣子已與抖音打通&#xff0c;相關功能內測中 2月19日消息&#xff0c;鈦媒體App獨家獲悉&#xff0c;字節旗下AI智能體開發平臺扣子&#xff08;Coze&#xff09;已與抖音打通&#xff0c;抖音創作者可在扣子智能體平臺打造AI分…

Python爬蟲實戰:爬取豆瓣電影

目錄 引言 1. 爬蟲基礎 1.1 什么是爬蟲&#xff1f; 1.2 Python爬蟲常用庫 2. 實戰&#xff1a;抓取豆瓣電影Top250 2.1 安裝依賴庫 2.2 發送HTTP請求 ?編輯 2.3 解析HTML ?編輯 2.4 存儲數據 2.5 完整代碼 3. 進階&#xff1a;處理分頁和動態內容 3.1 抓取多頁…

請談談 Vue 中的響應式原理,如何實現?

一、Vue2響應式原理&#xff1a;Object.defineProperty的利與弊 實現原理&#xff1a; // 數據劫持核心實現 function defineReactive(obj, key, val) {const dep new Dep(); // 依賴收集容器Object.defineProperty(obj, key, {get() {if (Dep.target) { // 當前Watcher實例…