Apache MINA 是一個用于簡化開發構建高性能、高可擴展的網路應用框架,通過JAVA NIO在各種傳輸協議(如:TCP/IP、UDP/IP)上提供抽象的事件驅動異步API
Apache MINA可以稱為:NIO框架庫、服務端客戶端框架庫、一個網路套接字庫
特性
-
為各種傳輸協議提供統一API
-
提供類似servlet filter的過濾鏈路支持
-
可定制化執行緒模型
-
開箱即用的 SSL · TLS · StartTLS
- 超載保護和傳輸流量控制
- 易于集成(如:與Spring集成)
- 可平滑過渡到Netty
- ...

(Apache MINA在應用中的角色)
從圖中可以看出,只需要關注與MINA的互動而復雜的網路層處理交由MINA來完成
Apache MINA架構

(總體架構)
采用三層架構:
- I/O Service - 執行實際 I/O處理
- I/O Filter Chain - 將位元組過濾/轉換為所需的資料結構,反之亦然
- I/O Handler - 應用層實作邏輯的地方
所以創建一個基于Apache MINA的應用只需要
- 創建an I/O service - 選擇合適的Acceptor或自定義
- 創建 a Filter Chain - 轉換請求回應
- 創建 an I/O Handler - 處理不同的訊息

(服務端架構)

(服務端流程示意)

(客戶端架構)
案例分析
服務端
public static void main(String[] args) throws IOException { //IoService final IoAcceptor acceptor = new NioSocketAcceptor(); //IoFilter acceptor.getFilterChain().addLast("logger",new LoggingFilter()); acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter( //ProtocolCodecFactory new TextLineCodecFactory(Charset.forName("UTF-8")))); //IoHandler acceptor.setHandler(new TimeServerHandler()); //IoService acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10); acceptor.bind(new InetSocketAddress(PORT)); LOGGER.info("服務端啟動成功,埠:{}",PORT); }

客戶端
public static void main(String[] args) throws InterruptedException { //IoConnector final NioSocketConnector connector = new NioSocketConnector(); connector.setConnectTimeoutMillis(3*1000); // connector.getSessionConfig().setUseReadOperation(true); //IoFilter connector.getFilterChain().addLast("codec", new ProtocolCodecFilter( // ProtocolCodecFactory new ObjectSerializationCodecFactory())); connector.getFilterChain().addLast("logger",new LoggingFilter()); //IoHandler connector.setHandler(new TcpClientHandler()); IoSession session = null; for (;;){ try { //IoFuture final ConnectFuture connectFuture = connector.connect(new InetSocketAddress(HOST, PORT)); connectFuture.awaitUninterruptibly(); session = connectFuture.getSession(); break; }catch (RuntimeIoException e){ System.err.println("failed connected"); e.printStackTrace(); Thread.sleep(5000); } session.getCloseFuture().awaitUninterruptibly(); //IoProcessor connector.dispose(); } }

主要類圖

附件
圖示具體分析
參考
Apache MINA 官網
說明
附件具標注各個類方法的具體實作,請注意查看
參考請注明出處
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/109042.html
標籤:其他
上一篇:github賬戶初始化設定
