Mina執行流程解析(四)

2021-07-09 10:51:20 字數 2023 閱讀 3176

一、mina中的觀察者模式。

被觀察者:abstractioservice。被觀察者需要有乙個觀察者的佇列來儲存觀察者,該類採用了

ioservicelistenersupport這個幫助類,來儲存觀察者。

觀察者:ioservicelistener

//直接採用匿名內部類的方式構造了ioservicelistener的觀察者例項。該觀察者例項只是監聽service啟用。

private final ioservicelistener serviceactivationlistener = new ioservicelistener()

public void servicedeactivated(ioservice service) throws exception

public void serviceidle(ioservice service, idlestatus idlestatus) throws exception

public void sessioncreated(iosession session) throws exception

public void sessionclosed(iosession session) throws exception

public void sessiondestroyed(iosession session) throws exception

};

//構造方法中將觀察者新增到了觀察者佇列中。

protected abstractioservice(iosessionconfig sessionconfig, executor executor)

if (gettransportmetadata() == null)

if (!gettransportmetadata().getsessionconfigtype().isassignablefrom(sessionconfig.getclass()))

//新增到監聽佇列的方法在這裡!!!!!生成觀察者輔助類。

listeners = new ioservicelistenersupport(this);

listeners.add(serviceactivationlistener);

// stores the given session configuration

this.sessionconfig = sessionconfig;

// make jvm load the exception monitor before some transports

// change the thread context class loader.

exceptionmonitor.getinstance();

if (executor == null) else

threadname = getclass().get******name() + '-' + id.incrementandget();

}

好了,目前被觀察者有了,觀察者也有了,觀察者也加入到了觀察者佇列中,下面看看被觀察者被修改後,如何通知(notify)到觀察者的。

因為觀察者佇列儲存在了ioservicelistenersupport,同時這個佇列中的觀察者的責任是監聽service啟用,那麼肯定是該類的某個方法呼叫了觀察者的serviceactivated方法,這個方法就相當於notify了。

//notify方法。

public void fireserviceactivated()

activationtime = system.currenttimemillis();

//呼叫了serviceactivated

for (ioservicelistener listener : listeners) catch (exception e)

}}

總結:這是乙個比較純粹的觀察者模式。有被觀察者,被觀察者中有觀察者佇列,有通知方法。觀察者繼承了eventlistener。

Mina執行流程解析(一)

一 客戶端 例子 初始化客戶端的連線類 ioconnector connector new niosocketconnector 設定超時時間 connector.setconnecttimeoutmillis 5000 獲取當前的過濾鏈,並且在末尾新增乙個新的過濾器 connector.getfi...

mysql解析流程 mysql執行流程解析

mysql 可以分為 server 層和儲存引擎層兩部分 server 層包括聯結器 查詢快取 分析器 優化器 執行器等,涵蓋 mysql 的大多數核 心服務功能,以及所有的內建函式,所有跨儲存引 擎的功能都在這一層實現,比如儲存過程 觸發器 檢視等 而儲存引擎層負責資料的儲存和提取。其架構模式是外...

mina原始碼解析之 資料接收處理流程

如果想通過mina來實現乙個自定義協議的網路應用程式,使用者只需要編寫自定義協議編譯碼處理器和業務處理邏輯即可。由於每乙個session關聯乙個processor處理執行緒,多個session共享有限的processor執行緒池,如果handler中的業務邏輯處理比較耗時,會導致後續請求阻塞等待,嚴...