圖解Netty之Pipeline、channel、Context之間的資料流向。

來源:互聯網
上載者:User

標籤:log   png   str   類型   netty4   傳遞方式   loop   ann   outbound   

      聲明:本文為原創博文,禁止轉載。

      以下所繪製圖形均基於Netty4.0.28版本。

一、connect(outbound類型事件)

     當使用者調用channel的connect時,會發起一個outbound類型的事件,該事件將在pipeline中傳遞(pipeline.connect),首先由tail handler處理,該handler只是將事件透傳給下一個outbound類型的使用者Handler(如果有),事件依次傳遞下去,直到傳遞到head handler,該handler會調用unsafe.connect()向eventloop(nio的selector)註冊一個讀事件。 

 

 二、connect成功之後資料流圖(inbound類型事件)

      當使用者發起一個connect請求後,當串連可用時,eventloop(底層使用nio的selector)會引發一個ChannelActive事件,該事件最先有unsafe捕獲,之後會調用pipeline.fireChannelActive()將該事件在pipeline中傳播,緊接著會根據inbound類型事件的傳遞方式在各個handler和context之間進行鏈式傳遞。其中,有一個比較關注的地方是,在channelActive事件觸發的時候,如果channel被設定成autoRead,那麼此時還會調用channel.read()方法,該方法並不是真正的從channel讀取資料,而是向eventloop註冊讀事件(因為一個channel在向eventloop中註冊時,預設不註冊任何事件),關於channel.read的過程可以看下文的另一張圖。

 

 

三、channel.read事件流圖(outbound類型事件)

      當使用者調用channel.read()後,會發起一個outbound類型的事件,該事件最先會由pipeline中tail handler處理,該handler只是將該事件透傳給前面一個outbound類型的使用者handler(如果有的話),這樣依次繼續向前傳遞,直到傳遞到head handler,該handler會調用unsafe.read()向eventloop註冊讀事件(也就是向nio的selector上添加讀事件)

 

 

四、channel.write(outbound類型事件)

     與channel.read()類型,wirte也是一個outbound類型事件,該事件最先會由pipeline中的tail handler透傳給前面的一個outbound類型的使用者handler(如果有的話),這樣依次傳遞,直到傳遞給head handler,該handler會調用unsafe.write()方法,這裡的wirte並不會執行真正的發送,而是將要發送的資料緩衝起來,直到調用flush時,這些資料才會執行真正的網路io。 

 五、flush(outbound類型事件)

     如前文所示,flush也是一個outbound類型的事件,與wirte不同,flush會執行真正的網路io操作。

 

 

 

六、當channel有資料可讀時(inbound類型事件)

     當eventloop層檢測到網路層有資料可讀時(nio的selector返回相應的seleciontKeys),該事件會首先傳遞給unsafe,緊接著會調用pipeline.fireChannelRead(),將事件開始在pipeline中傳遞,該事件最先會有head handler處理(head.fireChannelRead()),該handler直接將事件透傳給下一個inbound類型的使用者handler(如果有的話),該事件依次向下傳遞,直到傳遞到tail handler。

 

 

圖解Netty之Pipeline、channel、Context之間的資料流向。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.