最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對Netty組件的基本介紹

 更新時間:2021年06月30日 11:46:10   作者:二次函數(shù)太  
這篇文章主要介紹了對Netty組件的基本介紹,Netty是基于Java NIO client-server的網(wǎng)絡(luò)應(yīng)用框架,使用Netty可以快速開發(fā)網(wǎng)絡(luò)應(yīng)用,本文涵蓋了netty開發(fā)中主要的組件的介紹,需要的朋友可以參考下

Netty的介紹

netty是一個異步的基于事件的框架,主要針對在tcp協(xié)議下,開發(fā)面向clients端的高并發(fā)應(yīng)用。

netty本質(zhì)是一個nio框架。

IO模型

Java共支持3中io模型 : BIO,AIO,NIO

BIO

同步阻塞,一個連接一個線程,有連接請求時服務(wù)端就需要啟動一個線程處理。如果這個線程不做任何事就會造成不必要的開銷。當(dāng)并發(fā)數(shù)較大時,需要創(chuàng)建大量線程來處理連接。

NIO

同步非阻塞,可以做到一個線程處理多個操作。

NIO 有三大核心部分,Channel,Buffer ,selector

selector、 channel 和buffer的關(guān)系

  1. 每個channel 對應(yīng)一個buffer
  2. selector 對應(yīng)一個線程,一個線程對應(yīng)多個channel
  3. 程序切換哪個channel 是由事件決定的。event
  4. selector 會根據(jù)不同的事件,在各個通道上切換
  5. Buffer 就是一個內(nèi)存塊,底層是有一個數(shù)組
  6. 數(shù)據(jù)的讀取寫入是通過buffer,既可以讀也可以寫, 兩者切換的方法是flip
  7. channel 是雙向的

Buffer緩沖區(qū)

一個可以讀寫數(shù)據(jù)的內(nèi)存塊,可以理解成一個容器對象。它負責(zé)從channel中讀取數(shù)據(jù),封裝成Buffer對象。Buffer為每一個基本數(shù)據(jù)類型都提供了實現(xiàn)類。它主要有三個屬性:

  • capacity

內(nèi)存塊的固定大小值

  • position

下一個要進行讀寫位置的索引

  • limit

在寫模式下,limit = position ,在讀模式下,它表示你最多讀到之前寫入的最大值

重要的方法

allocate(int count) 初始化buffer容量

get () 從 position 位置讀

flip() 由寫模式切換為讀模式

Channel 通道

作用類似于流,但是可以同時進行讀寫,可以異步讀寫。

Channel在NIo中是一個接口,它的實現(xiàn)類有:

  • FileChannel 用于文件讀寫
  • ServerSocketChannel TCP數(shù)據(jù)讀寫
  • DatagramChannel 用于UDP數(shù)據(jù)讀寫

主要方法:

  • read 從通道讀取數(shù)據(jù)并放到緩沖區(qū)中
  • write 把緩沖區(qū)的數(shù)據(jù)寫到通道中
  • transferfrom
  • transferto

Selector 選擇器

能夠監(jiān)測多個注冊的通道上是否有事件發(fā)生,如果有事件發(fā)生獲取事件交給通道處理。

主要方法:

  • open 獲取一個選擇器對象
  • SelectionKey register(seelctor,常量) 注冊通道 ,常量一共有4種,read讀,write寫,connect 連接已建立 ,accept(有新的網(wǎng)絡(luò)連接可以接入)
  • select() 監(jiān)測所有注冊的通道,阻塞

原生NIo存在的問題

類庫與API復(fù)雜,開發(fā)難度大,有bug

Netty模型

  1. netty抽象出2組線程池,bossGroup 負責(zé)接受客戶端的連接,workGroup 負責(zé)讀寫
  2. bossGroup 與workerGroup 都是NioEventLoopGroup
  3. 每一個NioEventLoopGroup相當(dāng)于一個事件循環(huán)組,每個循環(huán)都是NIoEventLoop
  4. NIoEventLoop表示一個不斷循環(huán)處理執(zhí)行任務(wù)的線程

Netty核心模塊組件

Bootstrap,ServerBootstrap

Channel

ChannelFuture

netty中所有操作都是異步的,所以我們需要一個能夠確定其結(jié)果的方法。通過addListener() 方法獲取通知。

ChannelHandler

處理入站和出棧邏輯的容器。

生命周期方法

handlerAdded 當(dāng)ChannelHandler 添加到ChanelPipeLine中調(diào)用

handlerRemoved 移除時調(diào)用

它主要有2個子接口, ChannelInboundHandler 和 ChannelOutBoundHandler

ChannelPipeLine

它是ChannelHandler 的容器,內(nèi)部定義了一組ChannelHandler,是一組過濾器鏈

ChannelHandlerContext

用于ChannelPipe 和 ChannelHandler的關(guān)聯(lián),同一個ChannelPipeline 里的ChannelHandler的交互。

ByteBuf

netty的數(shù)據(jù)容器,是netty實現(xiàn)數(shù)據(jù)傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)。

內(nèi)部維護了兩個不同的索引,readIndex ,writeIndex。通過這兩個索引將數(shù)據(jù)劃分為3個區(qū)域。已經(jīng)讀過的字節(jié),可讀字節(jié),可寫字節(jié)。相比于jdk原生的bytebuf ,它有兩個指針,在讀寫轉(zhuǎn)換時不需要進行flip()

到此這篇關(guān)于對Netty組件的基本介紹的文章就介紹到這了,更多相關(guān)Netty組件介紹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 基礎(chǔ):string中的compareTo方法

    Java 基礎(chǔ):string中的compareTo方法

    這篇文章主要介紹了Java 基礎(chǔ):string中的compareTo方法,文章圍繞string中的compareTo方法的相關(guān)資料展開文章詳細內(nèi)容,希望對待大家有所幫助
    2021-12-12
  • MyBatis核心配置文件深入分析

    MyBatis核心配置文件深入分析

    這篇文章主要介紹了MyBatis核心配置文件,MyBatis的前身就是iBatis,iBatis本是由Clinton Begin開發(fā),后來捐給Apache基金會,成立了iBatis開源項目。2010年5月該項目由Apahce基金會遷移到了Google Code,并且改名為MyBatis
    2022-12-12
  • java棧實現(xiàn)二叉樹的非遞歸遍歷的示例代碼

    java棧實現(xiàn)二叉樹的非遞歸遍歷的示例代碼

    這篇文章主要介紹了java棧實現(xiàn)二叉樹的非遞歸遍歷,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 代理模式:JAVA靜態(tài)代理和動態(tài)代理的實例和實現(xiàn)詳解

    代理模式:JAVA靜態(tài)代理和動態(tài)代理的實例和實現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于Java靜態(tài)代理和動態(tài)代理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java連接postgresql數(shù)據(jù)庫代碼及maven配置方式

    java連接postgresql數(shù)據(jù)庫代碼及maven配置方式

    這篇文章主要介紹了java連接postgresql數(shù)據(jù)庫代碼及maven配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 理解Java注解及Spring的@Autowired是如何實現(xiàn)的

    理解Java注解及Spring的@Autowired是如何實現(xiàn)的

    今天通過本文帶領(lǐng)大家學(xué)習(xí)注解的基礎(chǔ)知識,學(xué)習(xí)Spring的@Autowired是怎么實現(xiàn)的,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-07-07
  • java 串口通信實現(xiàn)流程示例

    java 串口通信實現(xiàn)流程示例

    這篇文章主要介紹了java 串口通信實現(xiàn)流程示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot?項目的創(chuàng)建與啟動步驟詳解

    SpringBoot?項目的創(chuàng)建與啟動步驟詳解

    這篇文章主要介紹了SpringBoot?項目的創(chuàng)建與啟動,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java String類用法詳解

    Java String類用法詳解

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java String類用法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java 實現(xiàn)鏈表結(jié)點插入

    Java 實現(xiàn)鏈表結(jié)點插入

    這篇文章主要介紹了Java 實現(xiàn)鏈表結(jié)點插入操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

葫芦岛市| 马龙县| 鄂托克旗| 棋牌| 广汉市| 镇沅| 西平县| 贞丰县| 玉龙| 娄底市| 沅江市| 房产| 苏尼特右旗| 靖边县| 西吉县| 蒲城县| 方城县| 微博| 丰都县| 亳州市| 古浪县| 清苑县| 开江县| 太白县| SHOW| 河源市| 花莲市| 稷山县| 五家渠市| 吴旗县| 蕉岭县| 长垣县| 阿拉善右旗| 徐汇区| 申扎县| 九龙城区| 杭州市| 历史| 钟祥市| 扶沟县| 石河子市|