ChannelFuture異步模型

Netty中的操作,如bind、Connect、Write,會返回一個ChannelFuture。
調用者並不能立刻獲得結果,而是通過Future-Listener機制,用戶可以主動獲取或等待通知機制獲取IO操作結果。
Netty的異步模型建立在Future和Callback之上的。

假設有個方法func,計算非常耗時,等待顯然不合適。那麼可以在調用func時,返回一個Future對象,後續可以通過Future監控func的處理過程。

Future說明

  • 表示異步執行的結果,可以使用它所提供的方法檢測執行是否完成
  • ChannelFuture是一個接口,可以添加監聽器,當監聽的事件完成時,就會通知到監聽器。
			ChannelFuture cf = bootstrap.bind(6666).sync();
			// 添加Listener
            cf.addListener(new ChannelFutureListener() {
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
                    if (future.isSuccess()){
                        System.out.println("綁定完成");
                    }else{
                        System.out.println("綁定失敗");
                    }
                }
            });

監聽事件完成,就會執行operationComplete,可以通過isSuccess、isCancelled、isDone等來判斷執行結果。

相比傳統的阻塞IO,執行IO操作就會阻塞在這裏,直到完成。
異步的優點就是不會阻塞,線程在IO期間可以做些其他事情。在高併發的情況下會更穩點和更高的吞吐量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章