Netty 學習筆記(1)

本文是我學習《Netty實戰》的一些筆記。


Netty 的核心組件:

  1. Channel
  2. 回調
  3. Future
  4. 事件和ChannelHandler

一、 Channel

Channel 是 java NIO的一個基本構造??梢园袰hannel看做是傳入或者傳出數據的載體。它可以被打開或者關閉,連接或者斷開連接。

二、回調

一個回調就是一個方法,一個指向已經被提供給另外一個方法的方法的引用,使得后者可以再適當的時候調用前者。Netty內部使用了回調來處理事件,當一個回調被觸發時候,相關的事件可以被一個interfaceChannelHandler的實現處理。
比如,當一個新的連接被建立,ChannelHandler的channelActive()回調方法將會被調用。

public class EchoServerHandler extends ChannelHandlerAdapter{

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        ctx.write("連接建立!");
    }
}

三、Future

Future提供了另一種在操作完成時通知應用程序的方式。Netty提供了ChannelFuture,用于在執行異步操作的時候使用。ChannelFuture提供了方法可以注冊一個或多個ChannelFutureListener實例。listener的回調方法operationComplete()將會在對應的操作完成時被調用。

四、事件和ChannelHandler

Netty 使用不同的事件來通知我們狀態的改變或者是操作的狀態。我們可以基于已經發生的事件來觸發適當的動作。Netty的事件按照它們與入站或出站數據流的相關性進行分類。

入站:

  • 連接已被激活或者連接失活
  • 數據讀取
  • 用戶事件
  • 錯誤事件

出站:

  • 打開或者關閉到遠程節點的連接
  • 將數據寫到或者沖刷到socket

每個事件都可被分發給ChannelHandler類中的某個用戶實現的方法。

五、EventLoop

Netty通過觸發事件講Selector從應用程序中抽象出來。在內部,為每個Channel分配一個EventLoop,用以處理所有事件,包括:

  • 注冊感興趣的事件
  • ==將事件派發給ChannelHandler==
  • 安排進一步的動作

EventLoop 本身由一個線程驅動,處理了一個Channel的所有I/O事件,并且在該EventLoop的整個生命周期內都不會改變。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容