成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起聊聊Netty核心模塊

開發 前端
Netty中所有的IO操作都是異步的,不能立刻得知是否被正確處理。但可以給Future和ChannelFuture注冊一個監聽,當操作執行成功或失敗時,會自動觸發監聽事件。

1、Bootstrap、ServerBootstrap

  • Bootstrap意思是引導,一個Netty應用通道由一個Bootstrap開始,主要作用是配置整個Netty程序,串聯各個組件,Netty中Bootstrap類是服務端啟動引導類。

常用的方法:

public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) 用于服務器端,設置兩個EventLoopGrouppublic B group(EventLoopGroup group) 用于客戶端,設置一個EventLoopGrouppublic B channel(Class\ channelClass) 設置一個Netty程序的通道實現 public \ B option(ChannelOption\ option, T value) 給ServerChannel添加配置public \ ServerBootstrap childOption(ChannelOption\ childOption, T value) 給接收的通道添加配置public ServerBootstrap childHandler(ChannelHandler childHandler) 設置業務處理類(自定義的Handler)public ChannelFuture bind(int inetPort) 用于服務器端,設置綁定的端口號public ChannelFuture connect(String inetHost, int inetPort) 用于客戶端,用來連接服務器

2、Future、ChannelFuture

  • Netty中所有的IO操作都是異步的,不能立刻得知是否被正確處理。但可以給Future和ChannelFuture注冊一個監聽,當操作執行成功或失敗時,會自動觸發監聽事件。

常用的方法:

Channel channel() 返回當前正在進行IO操作的通道 ChannelFuture sync() 等待異步操作執行完畢。

3、Channel

  • Netty網絡通訊組件,能夠用于執行網絡IO操作。
  • 通過Channel可獲得當前網絡的通道的狀態。
  • 通過Channel可獲得網絡連接的配置參數。
  • Channel提供異步的網絡IO操作(如建立連接,讀寫,綁定端口)。
  • 任何調用返回一個ChannelFuture實例,通過注冊監聽到ChannelFuture上,在IO操作完成時回調通知調用方。
  • 支持關聯IO操作與對應的處理程序。
  • 不同協議、不同的阻塞類型的都有不同的Channel類型與之對應,常用的Channel類型:

NioSocketChannel,異步的客戶端TCP Socket連接 NioServerSocketChannel,異步的服務端TCP Socket連接 NioDatagramChannel,異步的UDP連接 NioSctpChannel,異步的客戶端Sctp連接 NioSctpServerChannel,異步的Sctp服務器端連接,這些通道涵蓋了UDP和TCP網絡IO以及文件IO。

4、Selector

Netty基于Selector對象實現IO多路復用,通過Selector一個線程可以監聽多個連接的Channel事件。

當向一個Selector中注冊Channel后,Selector內部會輪詢這些Channel是否有已就緒的IO事件(如可讀、可寫、網絡連接完成等),這樣程序就可以很簡單地使用一個線程高效管理多個Channel。

5、ChannelHandler及其實現類

  • ChannelHandler是一個接口,處理IO事件或攔截IO操作,并將其轉發到其ChannelPipeline中的下一個處理程序。
  • ChannelHandler本身并沒有提供很多方法,使用時可繼承它的子類。
  • ChannelHandler及其實現類。

ChannelInboundHandler 用于處理入站IO事件 ChannelOutboundHandler 用于處理出站IO事件。

  • 實際使用中,經常需要自定義Handler類繼承ChannelInboundHandlerAdapter,然后重寫相關方法實現業務邏輯。

public void channelActive(ChannelHandlerContext ctx) 通道就緒事件 public void channelInactive(ChannelHandlerContext ctx) 通道關閉事件 public void channelRead(ChannelHandlerContext ctx, Object msg) 讀取數據事件 public void channelReadComplete(ChannelHandlerContext ctx) 數據讀取完畢事件 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) 拋出異常事件。

6、Pipeline和ChannelPipeline

ChannelPipeline是一個重點:

  • ChannelPipeline是一個Handler的集合,負責處理inbound或outbound事件,相當于一個貫穿Netty的職責鏈。
  • ChannlePipeline實現了一種高級形式的攔截過濾器模式,使用戶可以完全控制事件的處理方式,以及Channel中各個ChannelHandler如何相互交互。
  • 在Netty中每個Channel都有且僅有一個ChannelPipeline與之對應,它們的組成關系如下:

一個Channel包含了一個ChannelPipeline,而ChannelPipeline中又維護了一個由ChannelHandlerContext組成的雙向鏈表,并且每個ChannelHandlerContext中又關聯著一個ChannelHander 入站事件和出站事件在一個雙向鏈表中,入站事件會從鏈表head往后傳遞到最后一個入站的handler,出站事件會從鏈表tail往前傳遞到最前一個出站的handler,兩種類型的handler互不干擾。

常用方法

ChannelPipeline addLast(ChannelHandler… handlers); 把一個業務處理類(handler)添加到鏈表的第一個位置 ChannelPipeline addFirst(ChannelHandler… handlers); 把一個業務處理類(handler)添加到鏈表的最后一個位置。

7、ChannelHandlerContext

保存Channel相關的所有上下文信息,同時關聯一個ChannelHandler對象。

ChannelHandlerContext中包含一個具體的事件處理器ChannelHandler,同時也綁定了對應的pipeline和Channel,方便對ChannelHandler進行調用。

常用方法

ChannelFuture close(); 關閉當前通道 ChannelHandlerContext flush(); 刷新數據 ChannelFuture writeAndFlush(Object msg); 將數據寫到ChannelPipeline中,并開始出站處理。

8、ChannelOption

Netty在創建Channel實例后,一般都需要設置ChannelOption參數。

ChannelOption參數如下:

ChannelOption.SO_BACKLOG 對應TCP/IP協議listen函數中的backlog參數,用來初始化服務器可用隊列大小。服務端處理客戶端連接請求是順序處理的ChannelOption.SO_KEEPALIVE 保持連接活動狀態

9、EventLoopGroup和其實現類NioEventLoopGroup

  • EventLoopGroup是一組EventLoop的抽象,Netty為了更好的利用多核CPU資源,一般會有多個EventLoop同時工作,每個EventLoop維護著一個Selector實例。
  • EventLoopGroup提供next接口,可以從組里面按照一定的規則獲取其中一個EventLoop來處理任務。
  • 通常一個服務端口即一個ServerSocketChannel對應一個Selector和一個EventLoop線程。BossEventLoop負責接收客戶端的連接并將SocketChannel交給WorkerEventLoopGroup來進行IO處理。

BossEventLoopGroup通常是一個單線程的EventLoop,EventLoop維護著一個注冊了ServerSocketChannel的Selector實例,BossEventLoop不斷輪詢Selector將連接事件分離出來。通常是OP_ACCEPT事件,然后將接收到的SocketChannel交給WorkerEventLoopGroupWorkerEventLoopGroup會由next選擇其中一個EventLoop來將這個SocketChannel注冊到其維護的Selector并對其后續的IO事件進行處理。

常用方法:

public NioEventLoopGroup(int nThreads),構造函數,可以指定線程數,如果沒有指定就是CPU核心數的兩倍 public Future\ shutdownGracefully() 斷開連接,關閉線程。

10、Unpooled

Netty提供一個專門用來操作緩沖區(Netty數據容器)的工具類。

常用方法:

public static ByteBuf copiedBuffer(CharSequence string, Charset charset)。

public class NettyByteBufTest {
public static void main(String[] args) {
// 創建一個包含數組byte[10]的ByteBuf對象
// Netty的ByteBuf不需要使用filp進行反轉,底層維護了readInder和writerIndex
// 通過readerIndex、
ByteBuf buffer = Unpooled.buffer(10);
for (int i = 0; i < 10; i++) {
buffer.writeByte(i);
}
System.out.println("capacity=" + buffer.capacity());
//輸出
for (int i = 0; i < buffer.capacity(); i++) {
System.out.println(buffer.readByte());
}
}
}

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-01-04 18:10:26

服務模塊化jre

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2023-06-07 14:07:00

架構

2022-11-12 12:33:38

CSS預處理器Sass

2022-06-26 09:40:55

Django框架服務

2023-04-26 07:30:00

promptUI非結構化

2022-02-14 07:03:31

網站安全MFA

2025-03-27 02:00:00

SPIJava接口

2023-07-27 07:46:51

SAFe團隊測試

2022-01-04 12:08:46

設計接口

2022-04-06 08:23:57

指針函數代碼

2023-12-28 09:55:08

隊列數據結構存儲

2022-07-29 08:17:46

Java對象內存

2024-02-26 00:00:00

Go性能工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 香蕉久久久 | 视频一区在线 | 亚洲男女视频在线观看 | 在线日韩不卡 | 在线欧美小视频 | 最新国产精品精品视频 | 一区二区三区电影在线观看 | 毛片视频观看 | 国产精品s色 | 成人精品一区二区三区中文字幕 | 久久精品一区二区三区四区 | 亚洲一区欧美一区 | 欧美在线网站 | 亚洲免费精品 | 成人免费片| 99精品免费视频 | 久久高清精品 | 老司机精品福利视频 | www.狠狠操 | 国产精品激情小视频 | 国产一级一级 | 成年人国产在线观看 | 国产伦一区二区三区久久 | 日韩欧美在线观看视频 | 国产丝袜一区二区三区免费视频 | 国产在线看片 | 精品国产免费一区二区三区五区 | 亚洲免费在线视频 | 欧美日韩电影一区二区 | 国产在线看片 | 国产精品久久久久久影视 | 三级国产三级在线 | 中文字幕电影在线观看 | 欧美精品第一页 | 中文字幕精品一区二区三区精品 | 色综合美女 | 久久尤物免费一区二区三区 | 成人欧美一区二区三区在线播放 | 伊人伊成久久人综合网站 | 精品国产一区二区国模嫣然 | 成人精品|