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. 后退欧拉法求解常微分方程(c++)

    #include<iostream> #include<iomanip> using namespace std; int main() { double x,y,yn,h,t ...

  2. PHP 根据php传的值修改 select 中动态生成的 option 组的默认选中值

    有一个情况今天遇到了:通过后台传过来的一组下拉框的option值,需要默认选中其中某一项. html 部分是这样的: <select class="form-control" ...

  3. java下载文件工具类

    java下载文件工具类 package com.skjd.util; import java.io.BufferedInputStream; import java.io.BufferedOutput ...

  4. Jmeter工具功能介绍

    可以去官方学习:http://jmeter.apache.org/ 1.可以修改语言 2.部分图标功能 新建 打开一个jmeter脚本 保存一个jmeter脚本 剪切 复制 粘贴 展开目录树 收起目录 ...

  5. Java内存模型与Volatile,Happen-Before原则等

     Java的内存模型 Java内存模型(JMM)是一个抽象的模型.决定了线程主要定义了线程和内存间的抽象关系:主内存存放的是线程共享变量,每个线程有自己的工作内存,存放变量的副本,只能对副本进行读写, ...

  6. Java_jdbc 基础笔记之十 数据库连接 (ResultSetMetaData 类)

    ResultSetMetaData 类 调用ResultSet 的getMetaData()方法得到ResultSetMetaData 类对象: 可用于获取关于 ResultSet 对象中列的类型和属 ...

  7. python @classmethod和@staticmethod区别

    python 类方法和静态方法区别 python @classmethod和@staticmethod区别 Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢 ...

  8. 从安装PHP到第一个tomcat执行的hello world其实没那么难

    001 初入门的朋友问我为什么她的PHP老是不能安装运行成功,作为一个乐(shi)于(li)助(liao)人(mei)的半程序员, 自然是要好好研究然后手把手教妹纸了! 002 话不多说,进入正题 为 ...

  9. ISO/IEC 9899:2011 条款6.10——预处理指示符

    6.10 预处理指示符 语法 1.preprocessing-file: groupopt group: group-part group    group-part group-part: if-s ...

  10. osg::Group源码

    osg::Group源码 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This library i ...