欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

對(duì)Netty組件的基本介紹

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

Netty的介紹

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

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

IO模型

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

BIO

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

NIO

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

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

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

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

Buffer緩沖區(qū)

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

  • capacity

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

  • position

下一個(gè)要進(jìn)行讀寫位置的索引

  • limit

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

重要的方法

allocate(int count) 初始化buffer容量

get () 從 position 位置讀

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

Channel 通道

作用類似于流,但是可以同時(shí)進(jìn)行讀寫,可以異步讀寫。

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

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

主要方法:

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

Selector 選擇器

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

主要方法:

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

原生NIo存在的問題

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

Netty模型

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

Netty核心模塊組件

Bootstrap,ServerBootstrap

Channel

ChannelFuture

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

ChannelHandler

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

生命周期方法

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

handlerRemoved 移除時(shí)調(diào)用

它主要有2個(gè)子接口, ChannelInboundHandler 和 ChannelOutBoundHandler

ChannelPipeLine

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

ChannelHandlerContext

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

ByteBuf

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

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

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

相關(guān)文章

  • Java開發(fā)學(xué)習(xí)之Bean的生命周期詳解

    Java開發(fā)學(xué)習(xí)之Bean的生命周期詳解

    從創(chuàng)建到消亡的完整過程,例如人從出生到死亡的整個(gè)過程就是一個(gè)生命周期。本文將通過示例為大家詳細(xì)講講Bean的生命周期,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • Java中的異常Exception與處理方式詳解

    Java中的異常Exception與處理方式詳解

    這篇文章主要介紹了Java中的異常Exception與處理方式詳解, Java語言中,將程序執(zhí)行中發(fā)生的不正常情況稱為"異常"(開發(fā)過程中的語法錯(cuò)誤和邏輯錯(cuò)誤不是異常),需要的朋友可以參考下
    2024-01-01
  • Java由淺入深學(xué)習(xí)數(shù)組的使用

    Java由淺入深學(xué)習(xí)數(shù)組的使用

    數(shù)組對(duì)于每一門編程語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語言對(duì)數(shù)組的實(shí)現(xiàn)及處理也不盡相同。Java?語言中提供的數(shù)組是用來存儲(chǔ)固定大小的同類型元素
    2022-05-05
  • spring boot實(shí)現(xiàn)在request里解密參數(shù)返回

    spring boot實(shí)現(xiàn)在request里解密參數(shù)返回

    這篇文章主要介紹了Spring Boot實(shí)現(xiàn)在request里解密參數(shù)返回操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java模擬新浪微博登陸抓取數(shù)據(jù)

    Java模擬新浪微博登陸抓取數(shù)據(jù)

    本文主要介紹了Java模擬新浪微博登陸抓取數(shù)據(jù)的實(shí)現(xiàn)方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Gson中@JsonAdater注解的幾種方式總結(jié)

    Gson中@JsonAdater注解的幾種方式總結(jié)

    這篇文章主要介紹了Gson中@JsonAdater注解的幾種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java DelayQueue的原理淺析

    java DelayQueue的原理淺析

    在本篇文章里小編給大家整理的是一篇關(guān)于java DelayQueue的原理淺析,有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-01-01
  • SpringSceurity實(shí)現(xiàn)短信驗(yàn)證碼登陸

    SpringSceurity實(shí)現(xiàn)短信驗(yàn)證碼登陸

    這篇文章主要介紹了SpringSceurity實(shí)現(xiàn)短信驗(yàn)證碼登陸,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java客戶端Etcd官方倉(cāng)庫(kù)jetcd中KeepAlive接口實(shí)現(xiàn)

    java客戶端Etcd官方倉(cāng)庫(kù)jetcd中KeepAlive接口實(shí)現(xiàn)

    這篇文章主要為大家介紹了java客戶端Etcd官方倉(cāng)庫(kù)jetcd中KeepAlive接口實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,多多加薪
    2022-02-02
  • Springboot內(nèi)置的工具類之CollectionUtils示例講解

    Springboot內(nèi)置的工具類之CollectionUtils示例講解

    這篇文章主要介紹了Springboot內(nèi)置的工具類之CollectionUtils,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12

最新評(píng)論