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

對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ù)端就需要啟動一個線程處理。如果這個線程不做任何事就會造成不必要的開銷。當并發(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)存塊,可以理解成一個容器對象。它負責從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 負責接受客戶端的連接,workGroup 負責讀寫
  2. bossGroup 與workerGroup 都是NioEventLoopGroup
  3. 每一個NioEventLoopGroup相當于一個事件循環(huán)組,每個循環(huán)都是NIoEventLoop
  4. NIoEventLoop表示一個不斷循環(huán)處理執(zhí)行任務(wù)的線程

Netty核心模塊組件

Bootstrap,ServerBootstrap

Channel

ChannelFuture

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

ChannelHandler

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

生命周期方法

handlerAdded 當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開發(fā)學習之Bean的生命周期詳解

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

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

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

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

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

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

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

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

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

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

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

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

    java DelayQueue的原理淺析

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

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

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

    java客戶端Etcd官方倉庫jetcd中KeepAlive接口實現(xiàn)

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

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

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

最新評論