图解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的应用只需要

  1. 创建an I/O service - 选择合适的Acceptor或自定义
  2. 创建 a Filter Chain - 转换请求响应
  3. 创建 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.cnblogs.com/imaikce/p/11805402.html

时间: 2024-10-03 14:45:13

图解Apache Mina的相关文章

Apache MINA - Mina 特性说明

Mina 特性说明 MINA 是一个简单而特性强大的网络应用框架,它提供如下特性 : 提供针对多种传输类型的 API : TCP/IP & UDP/IP (通过 Java NIO) 串口通信 (RS232) (通过 RXTX) JVM 内部管道通信 你可以实现自己的网络协议 ! 使用过滤器接口(Filter)作为扩展点 ; 同 Servlet 过滤器很像 低层和高层 API : 低层 : 使用 ByteBuffers 高层 : 使用用户定义的消息对象和编码 高度自定义的线程模型: 单线程 一个线

Apache Mina

初步接触RPC通信框架,目前有很多优秀的RPC框架,今天我参考该博文:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html 学习了Aapche Mina通信框架.博主介绍的非常详细,包括Mina的源码流程,这里通过阅读博主的文章进行了学习记录,方便以后需要时使用. Apache Mina 是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP

网络通信框架Apache MINA

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的TCP/UDP 应用程序开发.串口通讯程序. Mina 的应用层: 一个设计成熟的开源框架,总是会仅可能的减少侵入性,并在整个项目中找到合适的位置,而不应对整个项目的构架设计产生过多的影响,图 1 就是 MIN

Apache Mina 2.x 框架+源码分析

源码下载 http://www.apache.org/dyn/closer.cgi/mina/mina/2.0.9/apache-mina-2.0.9-src.tar.gz 整体架构 核心过程(IoAcceptor 与 IoConnector通讯) 客户端: 1)通过SocketConnector同服务器端建立连接. 2)链接建立之后I/O的读写交给了I/O Processor线程,I/O Processor是多线程的. 3)通过I/O Processor读取的数据经过IoFilterChain

apache MINA之心跳协议运用

摘要 心跳协议,对基于CS模式的系统开发来说是一种比较常见与有效的连接检测方式,最近在用MINA框架,原本自己写了一个心跳协议实现,后来突然发现MINA本身带有这样一个心跳实现,感于对框架的小小崇拜,在实践的同时研究了一下! MINA TCP/IP SOCKET 心跳 MINA本身提供了一个过滤器类: org.apache.mina.filter.keepalive . KeepAliveFilter ,该过滤器用于在IO空闲的时候发送并且反馈心跳包(keep-alive request/res

基于Apache mina 的android 客户端tcp长连接实现

TCP-long-connection-based-on-Apache-mina 基于Apache mina 的tcp长连接实现,可用于android客户端推送. 项目Github地址:https://github.com/sddyljsx/Android-tcp-long-connection-based-on-Apache-mina 项目将Apache的mina项目移植到了android平台.实现长连接的主要思想是使用了mina的KeepAliveFilter过滤器. acceptor.ge

使用Apache MINA框架搭建服务端

使用MINA框架搭建服务端步骤: 1.定义一个启动服务的类MinaServer,并实现接口ServletContextListener 2.定义一个处理业务逻辑的类MinaServerHandler,并继承类IoHandlerAdapter 类MinaServer代码例如以下: import java.net.InetSocketAddress; import javax.servlet.ServletContextEvent; import javax.servlet.ServletConte

Apache Mina框架实践

1.为什么要用Apache Mina框架 ApacheMina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mina 的异步IO 默认使用的是JAVANIO 作为底层支持)操作的编程模型. 2.ApacheMina框架使用 Mina的执行流程: > IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立. > IoProcessor:这个接口在另一个线程上

Apache Mina框架自身实现的过滤器

在Apache Mina中,IoFilter介于IoService和IoHanlder之间,该IO过滤器对所有的输入.输出事件进行过滤,其在Apache Mina中的地位不可忽视,Apache Mina框架自身实现了很多过滤器,现将其作用总结一下: 1.BlacklistFilter:该过滤器称为黑名单过滤器,该过滤器用于阻止特定IP地址的访问Apache Mina服务端.其使用方法如下: private void addFilter(IoAcceptor acceptor) throws Un