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

Netty分布式源碼分析監(jiān)聽讀事件

 更新時間:2022年03月28日 08:58:33   作者:向南是個萬人迷  
這篇文章主要介紹了Netty分布式監(jiān)聽讀事件方法的代碼跟蹤解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前文傳送門:NioSocketChannel注冊到selector

我們回到AbstractUnsafe的register0()方法:

private void register0(ChannelPromise promise) {
    try {
        //省略代碼
        //做實(shí)際的注冊
        doRegister();
        neverRegistered = false;
        registered = true;
        //觸發(fā)事件
        pipeline.invokeHandlerAddedIfNeeded();
        safeSetSuccess(promise);
        //觸發(fā)注冊成功事件
        pipeline.fireChannelRegistered();
        if (isActive()) {
            if (firstRegistration) {
                //傳播active事件(4)
                pipeline.fireChannelActive();
            } else if (config().isAutoRead()) {
                beginRead();
            }
        }
    } catch (Throwable t) {
        //省略代碼
    }
}

doRegister()做完實(shí)際的注冊之后, 會走到if (isActive())這個判斷, 因?yàn)檫@個時候鏈路已經(jīng)完成, 所以這里是true, 默認(rèn)判斷條件if (firstRegistration)也為true, 所以這里會走到pipeline.fireChannelActive()這一步

有關(guān)pipeline我們會在下一章進(jìn)行詳細(xì)分析, 這里我們只需要知道, 最后會流轉(zhuǎn)到AbstractUnsafe的beginRead()方法

跟到beginRead()方法:

public final void beginRead() {
    assertEventLoop();
    if (!isActive()) {
        return;
    }
    try {
        doBeginRead();
    } catch (final Exception e) {
        //代碼省略
    }
}

這塊代碼同樣我們也不陌生, 因?yàn)槲覀兎治鯪ioServerSocketChannel也分析過了這一步

我們繼續(xù)跟到doBeginRead():

protected void doBeginRead() throws Exception {
    //拿到selectionKey
    final SelectionKey selectionKey = this.selectionKey;
    if (!selectionKey.isValid()) {
        return;
    }
    readPending = true;
    //獲得感興趣的事件
    final int interestOps = selectionKey.interestOps();
    //判斷是不是對任何事件都不監(jiān)聽
    if ((interestOps & readInterestOp) == 0) {
        //此條件成立
        //將之前的accept事件注冊, readInterest代表可以讀取一個新連接的意思
        selectionKey.interestOps(interestOps | readInterestOp);
    }
}

這段代碼相信大家會比較熟悉, 因?yàn)槲覀兎?wù)端channel注冊完之后也走到了這里

因?yàn)槲覀冊趧?chuàng)建NioSocketChannel的時候初始化的是read事件, selectionKey是channel在注冊時候返回的key, 所以selectionKey.interestOps(interestOps | readInterestOp)這一步, 會將當(dāng)前channel的讀事件注冊到selector中去

注冊完成之后, NioEventLoop就可以輪詢當(dāng)前channel的讀事件了

以上就是NioSocketChannel注冊監(jiān)聽事件的流程

章節(jié)小結(jié)

    本章學(xué)習(xí)了有關(guān)客戶端接入, NioSocketChannel的創(chuàng)建, 注冊等相關(guān)操作, 并且涉及到了上一小節(jié)剖析的eventLoop的相關(guān)邏輯, 同學(xué)們可以將相關(guān)的流程通過debug的方式走一遍以加深印象

以上就是Netty分布式源碼分析監(jiān)聽讀事件的詳細(xì)內(nèi)容,更多關(guān)于Netty分布式監(jiān)聽讀事件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java中-jar 與nohup的對比

    java中-jar 與nohup的對比

    這篇文章主要介紹了java中 -jar 與nohup的對比的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • springboot掃描引入jar包的service等組件方式

    springboot掃描引入jar包的service等組件方式

    這篇文章主要介紹了springboot掃描引入jar包的service等組件方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 淺談java中math類中三種取整函數(shù)的區(qū)別

    淺談java中math類中三種取整函數(shù)的區(qū)別

    下面小編就為大家?guī)硪黄獪\談java中math類中三種取整函數(shù)的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Java Spring集成MapStruct詳情

    Java Spring集成MapStruct詳情

    這篇文章主要介紹了Java Spring集成MapStruct詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • Spring Boot 簡介(入門篇)

    Spring Boot 簡介(入門篇)

    Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。下面通過本文給大家介紹spring boot相關(guān)知識,需要的的朋友參考下吧
    2017-04-04
  • Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解

    Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解

    這篇文章主要介紹了Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Java知識梳理之泛型用法詳解

    Java知識梳理之泛型用法詳解

    從JDK?5.0以后,Java引入了“參數(shù)化類型(Parameterized?type)”的概念,允許我們在創(chuàng)建集合時再指定集合元素的類型。本文就來和大家深入聊聊Java泛型的使用
    2022-08-08
  • Java并發(fā)編程service層處理并發(fā)事務(wù)加鎖可能會無效問題

    Java并發(fā)編程service層處理并發(fā)事務(wù)加鎖可能會無效問題

    這篇文章主要介紹了Java并發(fā)編程service層處理并發(fā)事務(wù)加鎖可能會無效問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SparkSQL快速入門教程

    SparkSQL快速入門教程

    Spark?SQL是Spark用于結(jié)構(gòu)化數(shù)據(jù)(structured?data)處理的Spark模塊,今天通過本文給大家介紹SparkSQL快速入門教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-02-02
  • 詳解springboot解決CORS跨域的三種方式

    詳解springboot解決CORS跨域的三種方式

    本文主要介紹了詳解springboot解決CORS跨域的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

河源市| 峨边| 呼和浩特市| 大厂| 延吉市| 成武县| 梁山县| 纳雍县| 兴海县| 日喀则市| 旅游| 永登县| 周至县| 濮阳市| 五常市| 固安县| 东莞市| 武汉市| 临汾市| 五莲县| 沙雅县| 海林市| 泸定县| 宣城市| 南充市| 阳高县| 海阳市| 甘德县| 隆化县| 莆田市| 板桥市| 望江县| 东方市| 延安市| 云林县| 宣化县| 嵊州市| 东源县| 来凤县| 恩平市| 年辖:市辖区|