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

说明

附件具标注各个类方法的具体实现,请注意查看

引用请注明出处

图解Apache Mina的更多相关文章

  1. Apache MiNa 实现多人聊天室

    Apache MiNa 实现多人聊天室 开发环境: System:Windows JavaSDK:1.6 IDE:eclipse.MyEclipse 6.6 开发依赖库: Jdk1.4+.mina-c ...

  2. Apache Mina(一)

    原文链接:http://www.cnblogs.com/xuekyo/archive/2013/03/06/2945826.html Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应 ...

  3. Apache MINA(一)

    Apache MINA is a network application framework which helps users develop high performance and high s ...

  4. Apache Mina 入门实例

    这个教程是介绍使用Mina搭建基础示例.这个教程内容是以创建一个时间服务器. 以下是这个教程需要准备的东西: MINA 2.0.7 Core JDK 1.5 或更高 SLF4J 1.3.0 或更高 L ...

  5. Apache Mina原理及典型例子分析

    Apache Mina ,一个高性能 Java 异步并发网络通讯框架.利用 Mina 可以高效地完成以下任务: TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JX ...

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

    源码下载 http://www.apache.org/dyn/closer.cgi/mina/mina/2.0.9/apache-mina-2.0.9-src.tar.gz 整体架构 核心过程(IoA ...

  7. Apache Mina开发手冊之四

    Apache Mina开发手冊之四 作者:chszs,转载需注明. 博客主页:http://blog.csdn.net/chszs 一.Mina开发的主要步骤 1.创建一个实现了IoService接口 ...

  8. 网络通信框架Apache MINA

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  9. Apache Mina(二)

    在mina的源码,整个框架最核心的几个包是 : org.apache.mina.core.service :IoService.IoProcessor.IoHandler.IoAcceptor.IoC ...

随机推荐

  1. cnetos6.5安装Varnish

    安装依赖包: tar -zxvf docutils-0.13.1.tar.gz python setup.py install unzip pcre2-10.23.zip ./configure -- ...

  2. 刷题记录:[De1ctf] shell shell shell

    目录 刷题记录:[De1ctf] shell shell shell 一.知识点 1.源码泄露 2.正则表达式不完善导致sql注入 3.soapclient反序列化->ssrf 4.扫描内网 5 ...

  3. 范仁义html+css课程---6、表格

    范仁义html+css课程---6.表格 一.总结 一句话总结: 表格中最常用的元素就是table.tr.td.th,还有语义化的thead.tbody.tfoot标签 1.表格构成三个基本要素? t ...

  4. Cesium学习笔记-工具篇20-PrimitiveTexture自定义渲染-贴图【转】

    前几篇博客我们了解了自定义点.线.面绘制,这篇我们接着学习cesium自定义纹理贴图.我们完成点线面的绘制,只是绘制出了对象的框架,没有逼真的外观.逼真外观是需要设置材质来实现:Material . ...

  5. Nginx Windows版安装及域名绑定

    1.到 http://nginx.org/en/download.html 下载一个稳定版本1.16.1 2.解压,放到C盘根目录下,如C:\nginx-1.16.1,此时双击nginx.exe就启动 ...

  6. typescript - 9.装饰器

    装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为. 通俗的讲装饰器就是一个方法,可以注入到类.方法.属性参数上来扩展类.属性.方法.参数的功能. 常见的装 ...

  7. ISO/IEC 9899:2011 摘要

    本国际标准指定了C编程语言的形式并建立了对用它所表达的程序的解释.其目的在于促进在多种计算机系统上的C语言程序的可移植性.可靠性.可维护性以及高效的执行. 为了详细地说明C语言本身以及C语言执行库,包 ...

  8. Spring cloud微服务安全实战-7-7自定义metrics监控指标(2)

    Gauge用来显示单词一个数的 勾选,这里编程仪表盘 设置仪表盘的最大值.最小值 保存 直接保存 保存成功的提示 返回 这就是我们做的一个简单的仪表盘 这个不适合我们的counter,因为没有最大值 ...

  9. 【Python学习之一】Python安装、IDE安装配置

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python2.X python3.X 所谓安装Python,安装的是 ...

  10. 【视频开发】【Live555】摄像头采集,264编码,live555直播(0)

    参看 有关live555 1.首先需要修改live555,定义从 内存中直接获取source而不是从文件读取source的类. 自己实现的类命名为 H264FramedLiveSource   /* ...