AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

面試官:說說Netty核心組件?

來源: 責編: 時間:2024-05-30 09:10:44 194觀看
導讀Netty 核心組件是指 Netty 在執行過程中所涉及到的重要概念,這些核心組件共同組成了 Netty 框架,使 Netty 框架能夠正常的運行。Netty 核心組件包含以下內容:啟動器 Bootstrap/ServerBootstrap事件循環器 EventLoopGroup

57928資訊網——每日最新資訊28at.com

Netty 核心組件是指 Netty 在執行過程中所涉及到的重要概念,這些核心組件共同組成了 Netty 框架,使 Netty 框架能夠正常的運行。57928資訊網——每日最新資訊28at.com

Netty 核心組件包含以下內容:57928資訊網——每日最新資訊28at.com

  • 啟動器 Bootstrap/ServerBootstrap
  • 事件循環器 EventLoopGroup/EventLoop
  • 通道 Channel
  • 通道處理器 ChannelHandler
  • 通道管道 ChannelPipeline

這些組件的交互流程如下:57928資訊網——每日最新資訊28at.com

57928資訊網——每日最新資訊28at.com

上圖是 Netty 邏輯處理架構,這個邏輯處理架構為典型網絡分層架構設計,共分為網絡通信層、事件調度層、服務編排層,每一層各司其職,共同成為了 Netty 的核心組件。57928資訊網——每日最新資訊28at.com

1.Bootstrap/ServerBootstrap【啟動器】

Bootstrap 是“引導”的意思,它主要負責整個 Netty 程序的啟動、初始化、服務器連接等過程,它相當于一條主線,串聯了 Netty 的其他核心組件。57928資訊網——每日最新資訊28at.com

57928資訊網——每日最新資訊28at.com

PS:Netty 中的引導器共分為兩種類型:一個為用于客戶端引導的 Bootstrap,另一個為用于服務端引導的 ServerBootStrap。57928資訊網——每日最新資訊28at.com

2.Channel【通道】

Channel 是網絡數據的傳輸通道,它代表了到實體(如硬件設備、文件、網絡套接字或能夠執行 I/O 操作的程序組件)的開放連接,如讀操作和寫操作。57928資訊網——每日最新資訊28at.com

Channel 提供了基本的 API 用于網絡 I/O 操作,如 register、bind、connect、read、write、flush 等。Netty 自己實現的 Channel 是以 JDK NIO Channel 為基礎的,相比較于 JDK NIO,Netty 的 Channel 提供了更高層次的抽象,同時屏蔽了底層 Socket 的復雜性,賦予了 Channel 更加強大的功能,你在使用 Netty 時基本不需要再與 Java Socket 類直接打交道。57928資訊網——每日最新資訊28at.com

常見的 Channel 類型有以下幾個:57928資訊網——每日最新資訊28at.com

  • NioServerSocketChannel 異步 TCP 服務端。
  • NioSocketChannel 異步 TCP 客戶端。
  • OioServerSocketChannel 同步 TCP 服務端。
  • OioSocketChannel 同步 TCP 客戶端。
  • NioDatagramChannel 異步 UDP 連接。
  • OioDatagramChannel 同步 UDP 連接。

當然 Channel 也會有多種狀態,如連接建立、連接注冊、數據讀寫、連接銷毀等狀態。57928資訊網——每日最新資訊28at.com

3.EventLoopGroup/EventLoop【事件循環器】

EventLoopGroup 是一個處理 I/O 操作和任務的線程組。在 Netty 中,EventLoopGroup 負責接受客戶端的連接,以及處理網絡事件,如讀/寫事件。它包含多個 EventLoop,每個 EventLoop 包含一個 Selector 和一個重要的組件,用于處理注冊到其上的 Channel 的所有 I/O 事件57928資訊網——每日最新資訊28at.com

(1)EventLoopGroup、EventLoop和Channel

它們三者的關系如下:57928資訊網——每日最新資訊28at.com

  1. 一個 EventLoopGroup 往往包含一個或者多個 EventLoop。EventLoop 用于處理 Channel 生命周期內的所有 I/O 事件,如 accept、connect、read、write 等 I/O 事件。
  2. EventLoop 同一時間會與一個線程綁定,每個 EventLoop 負責處理多個 Channel。
  3. 每新建一個 Channel,EventLoopGroup 會選擇一個 EventLoop 與其綁定。該 Channel 在生命周期內都可以對 EventLoop 進行多次綁定和解綁。

(2)線程模型

Netty 通過創建不同的 EventLoopGroup 參數配置,就可以支持 Reactor 的三種線程模型:57928資訊網——每日最新資訊28at.com

  1. 單線程模型:EventLoopGroup 只包含一個 EventLoop,Boss 和 Worker 使用同一個EventLoopGroup;
  2. 多線程模型:EventLoopGroup 包含多個 EventLoop,Boss 和 Worker 使用同一個EventLoopGroup;
  3. 主從多線程模型:EventLoopGroup 包含多個 EventLoop,Boss 是主 Reactor,Worker 是從 Reactor,它們分別使用不同的 EventLoopGroup,主 Reactor 負責新的網絡連接 Channel 創建,然后把 Channel 注冊到從 Reactor。

4.ChannelHandler【通道處理器】

ChannelHandler 是 Netty 處理 I/O 事件或攔截 I/O 操作的組件。當發生某種 I/O 事件時(如數據接收、連接打開、連接關閉等),ChannelHandler 會被調用并處理這個事件。57928資訊網——每日最新資訊28at.com

例如,數據的編解碼工作以及其他轉換工作實際都是通過 ChannelHandler 處理的。站在開發者的角度,最需要關注的就是 ChannelHandler,我們很少會直接操作 Channel,都是通過 ChannelHandler 間接完成。57928資訊網——每日最新資訊28at.com

5.ChannelPipeline【通道管道】

ChannelPipeline 是 ChannelHandler 的容器,提供了一種方式,以鏈式的方式組織和處理跨多個 ChannelHandler 之間的交互邏輯。當數據在管道中流動時,它會按照 ChannelHandler 的順序被處理。57928資訊網——每日最新資訊28at.com

6.Netty 簡單示例

下面是一個使用 Netty 構建的最簡單服務器端和客戶端示例,這個例子中,服務器接收到客戶端的消息后,會直接將消息原樣回傳給客戶端。57928資訊網——每日最新資訊28at.com

(1)服務器端

import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSocketChannel;import io.netty.handler.codec.string.StringDecoder;import io.netty.handler.codec.string.StringEncoder;public class NettyServer {    public static void main(String[] args) throws Exception {        // 創建BossGroup和WorkerGroup,它們都是EventLoopGroup的實現        // BossGroup負責接收進來的連接        EventLoopGroup bossGroup = new NioEventLoopGroup(1);        // WorkerGroup負責處理已經被接收的連接        EventLoopGroup workerGroup = new NioEventLoopGroup();        try {            // 創建服務器端的啟動對象,配置參數            ServerBootstrap bootstrap = new ServerBootstrap();            // 設置兩個線程組            bootstrap.group(bossGroup, workerGroup)                    // 設置服務器通道實現類型                    .channel(NioServerSocketChannel.class)                    // 設置通道初始化器,主要用來配置管道中的處理器                    .childHandler(new ChannelInitializer<SocketChannel>() {                        @Override                        protected void initChannel(SocketChannel ch) throws Exception {                            // 向管道加入處理器                            // 解碼器:ByteBuf -> String                            ch.pipeline().addLast(new StringDecoder());                            // 編碼器:String -> ByteBuf                            ch.pipeline().addLast(new StringEncoder());                            // 自定義的處理器                            ch.pipeline().addLast(new ServerHandler());                        }                    });            System.out.println("服務器 is ready...");            // 綁定一個端口并且同步,生成了一個ChannelFuture對象            ChannelFuture cf = bootstrap.bind(6668).sync();            // 對關閉通道進行監聽            cf.channel().closeFuture().sync();        } finally {            // 優雅關閉線程組            bossGroup.shutdownGracefully();            workerGroup.shutdownGracefully();        }    }}

(2)客戶端代碼

import io.netty.bootstrap.Bootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioSocketChannel;import io.netty.handler.codec.string.StringDecoder;import io.netty.handler.codec.string.StringEncoder;public class NettyClient {    public static void main(String[] args) throws Exception {        // 創建EventLoopGroup,相當于線程池        EventLoopGroup group = new NioEventLoopGroup();        try {            // 創建客戶端啟動對象            Bootstrap bootstrap = new Bootstrap();            // 設置相關參數            bootstrap.group(group) // 設置線程組                    .channel(NioSocketChannel.class) // 設置客戶端通道實現類型                    .handler(new ChannelInitializer<SocketChannel>() { // 設置處理器                        @Override                        protected void initChannel(SocketChannel ch) throws Exception {                            // 向管道加入處理器                            ch.pipeline().addLast(new StringDecoder());                            ch.pipeline().addLast(new StringEncoder());                            // 自定義的處理器                            ch.pipeline().addLast(new ClientHandler());                        }                    });            System.out.println("客戶端 is ready...");            // 發起異步連接操作            ChannelFuture future = bootstrap.connect("127.0.0.1", 6668).sync();            // 發送消息            future.channel().writeAndFlush("Hello Server!");            // 對關閉通道進行監聽            future.channel().closeFuture().sync();        } finally {            group.shutdownGracefully(); // 優雅關閉線程組        }    }}

參考&鳴謝

《Netty核心原理剖析與RPC實踐》57928資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-91684-0.html面試官:說說Netty核心組件?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 聊聊什么是微服務,你看明白了嗎?

下一篇: C#開源實用的工具類庫,集成超過1000多種擴展方法

標簽:
  • 熱門焦點
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • 量化指標是與非:挽救被量化指標扼殺的技術團隊

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術總監劉新翠在WOT2023大會上的主題分享,更多精彩內容及現場PPT,請關注51CTO技術棧公眾號,發消息【WOT2023PPT】即可直接領取
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 簽約井川里予、何丹彤,單視頻點贊近千萬,MCN黑馬永恒文希快速崛起!

    來源:視聽觀察永恒文希傳媒作為一家MCN公司,說起它的名字來,可能大家會覺得有點兒陌生,但是說出來下面一串的名字之后,或許大家就會感到震驚,原來這么多網紅,都簽約這家公司了。根
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 華為HarmonyOS 4升級計劃公布:首批34款機型今日開啟公測

    8月4日消息,今天下午華為正式發布了HarmonyOS 4系統,在更流暢的前提下,還帶來了不少新功能,UI設計也有變化,會讓手機煥然一新。華為宣布,首批機型將會在
  • 自研Exynos回歸!三星Galaxy S24系列將提供Exynos和驍龍雙版本

    年初,全新的三星Galaxy S23系列發布,包含Galaxy S23、Galaxy S23+和Galaxy S23 Ultra三個版本,全系搭載超頻版驍龍8 Gen 2,雖同樣采用臺積電4nm工藝制
Top