日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

图解Apache Mina

發布時間:2023/12/29 综合教程 52 生活家
生活随笔 收集整理的這篇文章主要介紹了 图解Apache Mina 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 官網

說明

附件具標注各個類方法的具體實現,請注意查看

引用請注明出處

總結

以上是生活随笔為你收集整理的图解Apache Mina的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。