欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

图解Apache Mina

发布时间:2023/12/29 67 生活家
生活随笔 收集整理的这篇文章主要介绍了 图解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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。