Netty 4.x 基于攔截鏈模式的事件模型

2018-10-26 09:54 更新

基于攔截鏈模式的事件模型

一個定義良好并具有擴(kuò)展能力的事件模型是事件驅(qū)動開發(fā)的必要條件。Netty 具有定義良好的 I/O 事件模型。由于嚴(yán)格的層次結(jié)構(gòu)區(qū)分了不同的事件類型,因此 Netty 也允許你在不破壞現(xiàn)有代碼的情況下實現(xiàn)自己的事件類型。這是與其他框架相比另一個不同的地方。很多 NIO 框架沒有或者僅有有限的事件模型概念;在你試圖添加一個新的事件類型的時候常常需要修改已有的代碼,或者根本就不允許你進(jìn)行這種擴(kuò)展。

在一個 ChannelPipeline 內(nèi)部一個 [ChannelEvent]() 被一組ChannelHandler 處理。這個管道是 Intercepting Filter (攔截過濾器)模式的一種高級形式的實現(xiàn),因此對于一個事件如何被處理以及管道內(nèi)部處理器間的交互過程,你都將擁有絕對的控制力。例如,你可以定義一個從 socket 讀取到數(shù)據(jù)后的操作:

    public class MyReadHandler implements SimpleChannelHandler {
         public void messageReceived(ChannelHandlerContext ctx, MessageEvent evt) {
             Object message = evt.getMessage();
             // Do something with the received message.
                ...

             // And forward the event to the next handler.
             ctx.sendUpstream(evt);
        }
    }

同時你也可以定義一種操作響應(yīng)其他處理器的寫操作請求:

    public class MyWriteHandler implements SimpleChannelHandler {
        public void writeRequested(ChannelHandlerContext ctx, MessageEvent evt) {
            Object message = evt.getMessage();
            // Do something with the message to be written.
                ...

            // And forward the event to the next handler.
            ctx.sendDownstream(evt);
        }
    }

有關(guān)事件模型的更多信息,請參考 API 文檔 ChannelEvent 和ChannelPipeline 部分。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號