Apache mina 入門(一)— 基礎知識

一、mina基礎知識:
Mina 官方網站:(http://mina.apache.org/
1.1、Apache Mina是一個能夠幫助用戶開發高性能和高伸縮性網絡應用程序的框架。它通過Java nio技術基於TCP/IP和UDP/IP協議提供了抽象的、事件驅動的、異步的API。
Apache MINA 也稱爲:
● NIO 框架庫
● 客戶端服務器框架庫
● 一個網絡套接字庫

1.2、MINA框架的特點有:基於java NIO類庫開發;採用非阻塞方式的異步傳輸;事件驅動;支持批量數據傳輸;支持TCP、UDP協議;控制反轉的設計模式(支持Spring);採用優雅的鬆耦合架構;可靈活的加載過濾器機制;單元測試更容易實現;可自定義線程的數量,以提高運行於多處理器上的性能;採用回調的方式完成調用,線程的使用更容易。

1.3、Mina的框架
當遠程客戶首次訪問採用MINA編寫的程序時,IoAcceptor作爲線程運行,負責接受來自客戶的請求。當有客戶請求連接時,創建一個IoSession,該IoSession與IoProcessor、SocketChannel以及IOService聯繫起來。IoProcessor也作爲另外一個線程運行,定時檢查客戶是否有數據到來,並對客戶請求進行處理,依次調用在IOService註冊的各個IoFilter,最後調用IoHandler進行最終的邏輯處理,再將處理後的結果Filter後返回給客戶端。

1.4、Mina 應用層示意圖如下所示:
這裏寫圖片描述
Mina處於中間層,它不關心底層網絡數據如何傳輸,只負責接收底層數據,過濾並轉換爲Java對象提供給我們的應用程序,然後把應用程序響應值過濾並轉換爲底層識別的字節,提供給底層傳輸;Mina是底層數據傳輸和用戶應用程序交互的接口。

1.5、Mina 內部流程
如下圖所示:
這裏寫圖片描述

1.6、Mina 工作流程
如下圖所示:
這裏寫圖片描述
Mina的核心接口:
1 IoService: 創建服務對象(客戶端或服務端)
2 IOFilter: 數據過濾(編碼解碼等)
3 IoHandler: 業務處理

二.MINA框架具體技術
2.1 MINA框架的常用類

1.類NioSocketAcceptor
用於創建服務端監聽
2.類NioSocketConnector
用於創建客戶端連接;
3.類IoSession
用來保存會話屬性和發送消息;可以理解爲服務器與客戶端的特定連接,該連接由服務器地址、端口以及客戶端地址、端口來決定。客戶端發起請求時,指定服務器地址和端口,客戶端也會指定或者根據網絡路由信息自動指定一個地址、自動分配一個端口。這個地址、端口對構成一個Session。

IoSession是服務器端對這種連接的抽象,MINA對其進行了封裝,定義了IoSession接口,用來代表客戶端與服務器的連接,在服務器端通過IoSession,實現對客戶端的操作、綁定與客戶端有關的信息與對象。通過利用Session的這個概念,編寫程序時就可以在服務器端非常方便地區分出是當前處理的是哪個客戶端的請求、維持客戶端的狀態信息、可以實現客戶端之間相互通訊。

IoSession提供以下一些常用方法:

(1)setAttribute(Object key, Object value) getAttribute(Object key)
功能說明:設置/獲取用戶定義的屬性,與web應用中的session類方法setAttribute,getAttribute方法類似
(2)getRemoteAddress()
功能說明:獲取遠程客戶端地址。
(3)getId()
功能說明:獲取Session的Id
(4)getCreationTime()
功能說明:獲得創建時間
(5)getLastIoTime()
功能說明:獲得上次IO時間
(6) getConfig()
功能說明:獲得配置信息。
(7)write(Object message)
功能說明:將數據發送給客戶端。
(8)close()
功能說明:關閉Session。
(說明:可以在Session中發送數據,但是Session沒有提供讀取數據的方法,讀取數據通過解碼器中的decode或者IoHandler中messageReceived方法)

4.類IoHandlerAdapter
從以上MINA框架簡圖可以看出,對來自客戶端數據最終的業務處理是在IoHandler中處理的。IoHandler封裝了來自客戶端不同事件的處理,通過實現相應的方法,當該事件發生時,IoHandler中的方法就會被觸發執行。
用於定義業務邏輯,常用的方法有:
(1)void exceptionCaught(IoSession session, Throwable cause)
功能說明:有異常發生時被觸發。
(2)void messageReceived(IoSession session, Object message)
功能說明:有消息到達時被觸發,message代表接收到的消息。
(3)void messageSent(IoSession session, Object message)
功能說明:發送消息時時被觸發,即在調用IoSession.write()時被觸發,message代表將要發送的消息。
(4)void sessionClosed(IoSession session)
功能說明:當連接關閉時被觸發,即Session終止時被觸發。
(5)void sessionCreated(IoSession session)
功能說明:當創建一個新連接時被觸發,即當開始一個新的Session時被觸發。
(6)void sessionIdle(IoSession session, IdleStatus status)
功能說明:當連接空閒時被觸發。使用IoSessionConfig中的setIdleTime(IdleStatus status, int idleTime)方法可以設置session的空閒時間。如果該Session的空閒時間超過設置的值,該方法被觸發,可以通過session.getIdleCount(status)來獲取sessionIdle被觸發的次數。
(7)void sessionOpened(IoSession session)
功能說明:當打開一個連接時被觸發。在目前的實現中,好像 sessionOpened 和 sessionCreated 沒有太大區別,sessionCreated 在 sessionOpened 之前被觸發。

IoHandler是一個接口,一般情況沒有必要直接實現該接口的每一個方法。MINA提供了一個IoHandlerAdapter類,該類實現了IoHandler要求的方法,但是都沒有做任何處理。當我們要編寫自己的Handler時,可以繼承IoHandlerAdapter,重寫需要事件方法即可。

5.類IoFilter
IoFilter用來對客戶的請求或發送給客戶的數據進行filter。與IoHandler一樣,Filter也是基於事件的,通過實現IoFilter接口,就可以對通信過程中的Session的事件進行處理。
IoFilter的主要作用:
l 記錄事件的日誌(Mina默認提供了LoggingFilter)
l 測量系統性能
l 信息驗證
l 過載控制
l 信息的轉換(主要就是編碼和解碼)

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