一、Apache Mina介紹
Apache Mina是一個能夠幫助使用者開發高性能和高伸縮性網絡應用程式的架構。它通過Java nio技術基于TCP/IP和UDP/IP協定提供了抽象的、事件驅動的、異步的API。
ApacheMINA是一個網絡應用程式架構,用來幫助使用者簡單地開發高性能和高可擴充性的網絡應用程式。它提供了一個通過Java NIO在不同的傳輸例如TCP/IP和UDP/IP上抽象的事件驅動的異步API。
Apache MINA 也稱為:
● NIO 架構庫
● 用戶端伺服器架構庫
● 一個網絡套接字庫
MINA雖然簡單但是仍然提供了全功能的網絡應用程式架構:
● 為不同的傳輸類型提供了統一的API:
○ 通過Java NIO提供TCP/IP 和 UDP/IP支援
○ 通過RXTX提供序列槽通訊(RS232)
○ In-VM管道通訊
○ 你能實作你自己的API!
● 過濾器作為一個擴充特性; 類似Servlet過濾器
● 低級和進階的API:
○ 低級: 使用位元組緩存(ByteBuffers)
○ 進階: 使用使用者定義的消息對象(objects)和編碼(codecs)
● 高度定制化線程模型:
○ 單線程
○ 一個線程池
○ 一個以上的線程池(也就是SEDA)
● 使用Java 5 SSL引擎提供沙盒(Out-of-the-box) SSL · TLS · StartTLS支援
● 超載保護和傳輸流量控制
● 利用模拟對象進行單元測試
● JMX管理能力
● 通過StreamIoHandler提供基于流的I/O支援
● 和知名的容器(例如PicoContainer、Spring)內建
● 從MINA平滑的遷移到Netty, MINA是Netty的前輩。
二、Apache Mina用戶端的通信過程:
通過SocketConnector同伺服器端建立連接配接。
連結建立之後I/O的讀寫交給了I/O Processor線程,I/O Processor是多線程的。
通過I/O Processor讀取的資料經過IoFilterChain裡所有配置的IoFilter,IoFilter進行消息的過濾,格式的轉換,在這個層面可以制定一些自定義的協定。
最後IoFilter将資料交給Handler進行業務處理,完成了整個讀取的過程。
寫入過程也是類似,隻是剛好倒過來,通過IoSession.write寫出資料,然後Handler進行寫入的業務處理,處理完成後交給IoFilterChain,進行消息過濾和協定的轉換,最後通過I/O Processor将資料寫出到socket通道。
三、Apache Mina Server端和Client端:
由于Server端和Client端都是基于以上三個元件的,是以對于Server端和Client端程式設計來說就都有類似的代碼結構。
對于Server端來說:
1. 建立I/O service - 這裡就是建立IOAcceptor類監聽端口。
2. 建立I/O Filter Chain - 這裡就是告訴使用那些IoFilter。
3. 建立I/O Handler - 自己的業務邏輯。
對于Client端來說:
1. 建立I/O service - 這裡就是建立IOConnector類來建立到Server端的連接配接。
2. 建立I/O Filter Chain - 這裡就是告訴使用那些IoFilter。
3. 建立I/O Handler - 自己的業務邏輯。