簡介:
apache mina(multipurpose infrastructure for network applications) 是一個網絡應用架構,有助于使用者非常友善地開發高性能、高伸縮性的網絡應用。它通過java nio提供了一個抽象的、事件驅動的、異步的位于各種傳輸協定(如tcp/ip和udp/ip)之上的api。
mina 架構
ioservice
ioservice是對于伺服器端接受連接配接和用戶端發起連接配接兩類行為的一個抽象。ioserver用來執行真正的 i/o 操作,以及管理 i/o 會話。兩個子接口為ioacceptor和ioconnector。ioacceptor用來接受連接配接,與用戶端進行通訊,并發出相應的 i/o 事件交給 ioporcessor來處理。ioconnector用來發起連接配接,與服務端進行通訊,并發出相應的 i/o 事件交給 ioporcessor來處理。
ioservicelistener
ioservicelistener是ioservice的監聽器,監聽與該ioservice相關的所有事件,例如,服務被激活、服務閑置、服務被銷毀、會話建立、會話銷毀等。
iosession
iosession表示一個活動的網絡連接配接,與所使用的傳輸方式無關。iosession可以用來存儲使用者自定義的與應用相關的屬性。這些屬性通常用來儲存應用的狀态資訊,還可以用來在iofilter器和iohandler之間交換資料。
ioprocessor
ioprocessor,負責iofilter和iohandler進行具體處理,用于為iosession執行具體的i/o操作。ioprocessor 負責調用注冊在ioservice上的過濾器,并在過濾器鍊之後調用iohandler。一個processor可以對應n個iosessions,一個iosession總是對應一個ioprocessor。
iofilter
iofilter是ioserver和iohander之間的橋梁,從 i/o 服務發送過來的所有 i/o 事件和請求,在到達 i/o 處理器之前,會先由 i/o 過濾器鍊中的 i/o 過濾器進行處理,比如記錄日志、性能分析、通路控制、負載均衡和消息轉換等。
iohandler
iohandler負責業務處理的,是i/o事件真正得到處理的地方,包含以下一些方法作為業務處理的擴充點
void exceptioncaught(iosession session, throwable cause)
當接口中其他方法抛出異常未被捕獲時觸發此方法
void messagereceived(iosession session, object message)
當接收到用戶端的請求資訊後觸發此方法
void messagesent(iosession session, object message)
當資訊已經傳送給用戶端後觸發此方法
void sessionclosed(iosession session)
當連接配接被關閉時觸發,例如用戶端程式意外退出等
void sessioncreated(iosession session)
當一個新用戶端連接配接後觸發此方法
void sessionidle(iosession session, idlestatus status)
當連接配接空閑時觸發此方法
void sessionopened(iosession session)
當連接配接後打開時觸發此方法,一般此方法與 sessioncreated 會被同時觸發