摘要:支持很多協議,并且提供用于數據處理的容器。我們已經知道由特定事件觸發。可專用于幾乎所有的動作,包括將一個對象轉為字節或相反,執行過程中拋出的異常處理。提供了一個容器給鏈并提供了一個用于管理沿著鏈入站和出站事件的流動。子類通過進行注冊。
前兩天寫了一點netty相關的知識,并寫了一個demo,但是對其原理還是沒有深入,今天我們來做一次研究吧
首先讓我們來認識一下netty的幾個核心人物吧
BOOTSTRAPNetty 應用程序通過設置 bootstrap(引導)類的開始,該類提供了一個 用于應用程序網絡層配置的容器。
ServerChannel實現負責創建子 Channel,它代表接受連接
在調用 bind() 或 connect() 之后,Bootstrap 類負責創建管道給客戶或應用程序,
CHANNEL底層網絡傳輸 API 必須提供給應用 I/O操作的接口,如讀,寫,連接,綁定等等。對于我們來說,這層結構幾乎總是會成為一個“socket”。 Netty 中的接口 Channel 定義了與 socket 豐富交互的操作集:bind, close, config, connect, isActive, isOpen, isWritable, read, write 等等。 Netty 提供大量的 Channel 實現來專門使用。這些包括 AbstractChannel,AbstractNioByteChannel,AbstractNioChannel,EmbeddedChannel, LocalServerChannel,NioSocketChannel 等等。
CHANNELHANDLERChannelHandler支持很多協議,并且提供用于數據處理的容器。我們已經知道 ChannelHandler 由特定事件觸發。 ChannelHandler 可專用于幾乎所有的動作,包括將一個對象轉為字節(或相反),執行過程中拋出的異常處理。
常用的一個接口是 ChannelInboundHandler,這個類型接收到入站事件(包括接收到的數據)可以處理應用程序邏輯。當你需要提供響應時,你也可以從 ChannelInboundHandler 沖刷數據。一句話,業務邏輯經常存活于一個或者多個 ChannelInboundHandler。
ChannelPipeline 提供了一個容器給 ChannelHandler 鏈并提供了一個API 用于管理沿著鏈入站和出站事件的流動。每個 Channel 都有自己的ChannelPipeline,當 Channel 創建時自動創建的。 ChannelHandler 是如何安裝在 ChannelPipeline? 主要是實現了ChannelHandler 的抽象 ChannelInitializer。ChannelInitializer子類 通過 ServerBootstrap 進行注冊。當它的方法 initChannel() 被調用時,這個對象將安裝自定義的 ChannelHandler 集到 pipeline。當這個操作完成時,ChannelInitializer 子類則 從 ChannelPipeline 自動刪除自身。
1.Channel 綁定到 ChannelPipeline
2.ChannelPipeline 綁定到 包含 ChannelHandler 的 Channel
3.ChannelHandler
4.當添加 ChannelHandler 到 ChannelPipeline 時,ChannelHandlerContext 被創建
EventLoop 用于處理 Channel 的 I/O 操作。一個單一的 EventLoop通常會處理多個 Channel 事件。一個 EventLoopGroup 可以含有多于一個的 EventLoop 和 提供了一種迭代用于檢索清單中的下一個。
簡單點來說,EventLoopGroup 是一個線程池,EventLoop是其中一個線程
但netty并不僅限于此
一旦 Channel 是分配給一個 EventLoop,它將使用這個 EventLoop 在它的生命周期里和同樣的線程。你可以,也應該,依靠這個,因為它可以確保你不需要擔心同步(包括線程安全、可見性和同步)在你 ChannelHandler實現。
Netty 所有的 I/O 操作都是異步。因為一個操作可能無法立即返回,我們需要有一種方法在以后確定它的結果。出于這個目的,Netty 提供了接口 ChannelFuture,它的 addListener 方法注冊了一個 ChannelFutureListener ,當操作完成時,可以被通知(不管成功與否)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66351.html
摘要:是一個高性能事件驅動的異步的非堵塞的框架,用于建立等底層的連接,基于可以建立高性能的服務器。在中提供了兩套,一套是針對標準輸入輸出,另一套就是網絡編程。和是標準中的核心對象是對原中流的模擬,任何來源和目的數據都必須通過一個對象。 Netty是一個高性能 事件驅動的異步的非堵塞的IO(NIO)框架,用于建立TCP等底層的連接,基于Netty可以建立高性能的Http服務器。1、首先來復習下...
摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現在也是一直保持著更新狀態。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...
摘要:背景在工作中雖然我經常使用到庫但是很多時候對的一些概念還是處于知其然不知其所以然的狀態因此就萌生了學習源碼的想法剛開始看源碼的時候自然是比較痛苦的主要原因有兩個第一網上沒有找到讓我滿意的詳盡的源碼分析的教程第二我也是第一次系統地學習這么大代 背景 在工作中, 雖然我經常使用到 Netty 庫, 但是很多時候對 Netty 的一些概念還是處于知其然, 不知其所以然的狀態, 因此就萌生了學...
摘要:零前期準備文章異常啰嗦且繞彎。二是底層真正起作用的類,并且提供了大量的靜態方法。在普通的線程中,這個對象由于本身沒有的原生支持,所以只能附著在對象當中。同一個線程中如果創建多個對象,獲取到的是同一個。 零 前期準備 0 FBI WARNING 文章異常啰嗦且繞彎。 1 版本 JDK 版本 : OpenJDK 11.0.1 IDE : idea 2018.3 Netty 版本 : net...
摘要:它使用了事件通知以確定在一組非阻塞套接字中有哪些已經就緒能夠進行相關的操作。目前,可以把看作是傳入入站或者傳出出站數據的載體。出站事件是未來將會觸發的某個動作的操作結果,這些動作包括打開或者關閉到遠程節點的連接將數據寫到或者沖刷到套接字。 netty的概念 定義 Netty 是一款異步的事件驅動的網絡應用程序框架,支持快速地開發可維護的高性能的面向協議的服務器和客戶端。我們可以很簡單的...
閱讀 1225·2021-11-11 16:54
閱讀 1738·2021-10-13 09:40
閱讀 933·2021-10-08 10:05
閱讀 3498·2021-09-22 15:50
閱讀 3701·2021-09-22 15:41
閱讀 1782·2021-09-22 15:08
閱讀 2338·2021-09-07 10:24
閱讀 3571·2019-08-30 12:52