Netty學習記錄-入門篇( 三 )


  • Netty中的I/O操作是異步的 , 包括Bind、Write、Connect等操作會簡單的返回一個 ChannelFuture 。
  • 調用者不能立刻獲得結果,而是通過 Future-Listener機制 , 用戶可以方便地主動獲取或者通過通知機制獲得I/O操作結果 。
  • Netty的異步模型是建立在future和callback(回調)之上的 。重點是future,它的核心思想:假設一個方法func,計算過程可能非常耗時 , 等待func返回顯然不合適 。那么在 調用func的時候,立刻返回一個future,后續可以
    通過future去監控方法func的處理過程(即:Future-Listener機制)
    • ChannelFuture是一個接口:Public interface ChannelFuture extends Future
    • 可以添加監聽器,當監聽的事件發生時,就會通知到監聽器 。
  • 在使用Netty進行編程時,攔截操作和轉換出入站數據只需要你提供callback或利用future即可 。這使得鏈式操作簡單、高效、并有利于編寫可重用、通用的代碼 。
  • Future-Listener機制當Future對象剛剛創建好時 , 處于非完成狀態,調用者可以通過返回的channelFuture來獲取操作執行的狀態,注冊監聽函數來執行完成后的操作 。
    常見的操作:
    - 通過 isDone 方法來判斷當前操作是否完成 。- 通過 isSuccess 方法來判斷已完成的當前操作是否成功 。- 通過 getCause 方法來獲取已完成的當前操作失敗的原因 。- 通過 isCancelled 方法來判斷已完成的當前操作是否被取消 。- 通過 addListener 方法來注冊監聽器,當操作已完成(isDone) , 將會通知指定的監聽器 。小結:相比于傳統阻塞I/O , 執行I/O操作后線程會被阻塞?。鋇講僮魍瓿?。異步處理的好處是不會造成線程阻塞,線程在I/O操作期間可以執行別的程序 , 在高并發情形下會 更穩定和更高的吞吐量 。
    Netty 核心模塊組件ServerBootstrap、BootstrapBootstrap意思是引導,一個Netty應用通常由一個Bootstrap開始,主要作用是配置整個Netty程序,串聯各個組件,Netty中Bootstrap類是客戶端程序的啟動引導類,ServerBootstrap是服務器啟動引導類 。
    常用方法:
    - public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup):用于服務器端,用來設置兩個EventLoop- public B group(EventLoopGroup group):該方法用于客戶端,用來設置一個EventLoop- public B channel(Class<? extends C> channelClass):該方法用來設置一個服務器端的通道實現- public B option(ChannelOption option, T value):用來給ServerChannel添加配置- public ServerBootstrap childOption(ChannelOption childOption, T value):用來給接收的通道添加配置- public ServerBootstrap childHandler(ChannelHandler childHandler):業務處理類 , 自定義handler- public ChannelFuture bind(int inetPort):用于服務器端,用來設置占用的端口號- public ChannelFuture connect(String inetHost, int inetPort):用于客戶端 , 用來連接服務器端Future、ChannelFutureNetty中所有的IO操作都是異步的,不能立刻得知消息是否被正確處理 。但是可以過一會等它執行完成或者直接注冊一個監聽,具體的實現就是通過Future和ChannelFuture ,  他們可以注冊一個監聽,當操作執行成功或失敗時監聽會自動觸發注冊的監聽事件
    常用的方法:
    - Channel channel():返回當前正在進行IO操作的通道- ChannelFuture sync():等待異步操作執行完畢ChannelNetty網絡通信的組件 , 能夠用于執行網絡 I/O 操作 。通過 Channel 可獲得當前網絡連接的通道的狀態 。通過 Channel 可獲得 網絡連接的配置參數 (例如接收緩沖區大?。?。Channel 提供異步的網絡 I/O 操作(如建立連接,讀寫,綁定端口),異步調用意味著任何 I/O 調用都將立即返回,并且不保證在調用結束時所請求的 I/O 操作已完成 調用立即返回一個 ChannelFuture實例 , 通過注冊監聽器到ChannelFuture上,可以 I/O 操作成功、失敗或取消時回調通知調用方 。不同協議、不同的阻塞類型的連接都有不同的 Channel 類型與之對應,常用的 Channel 類型:
    - NioSocketChannel,異步的客戶端 TCP Socket 連接 。- NioServerSocketChannel,異步的服務器端 TCP Socket 連接 。- NioDatagramChannel,異步的 UDP 連接 。- NioSctpChannel,異步的客戶端 Sctp 連接 。- NioSctpServerChannel,異步的 Sctp 服務器端連接,這些通道涵蓋了 UDP 和 TCP 網絡 IO 以及文件 IO 。

    推薦閱讀