Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

简介

Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。

MINA虽然简单但是仍然提供了全功能的网络应用程序框架:

● 为不同的传输类型提供了统一的API:

○ 通过Java NIO提供TCP/IP 和 UDP/IP支持

○ 通过RXTX提供串口通讯(RS232)

○ In-VM管道通讯

○ 你能实现你自己的API!

● 过滤器作为一个扩展特性; 类似Servlet过滤器

● 低级和高级的API:

○ 低级: 使用字节缓存(ByteBuffers)

○ 高级: 使用用户定义的消息对象(objects)和编码(codecs)

● 高度定制化线程模型:

○ 单线程

○ 一个线程池

○ 一个以上的线程池(也就是SEDA)

● 使用Java 5 SSL引擎提供沙盒(Out-of-the-box) SSL · TLS · StartTLS支持

● 超载保护和传输流量控制

● 利用模拟对象进行单元测试

● JMX管理能力

● 通过StreamIoHandler提供基于流的I/O支持

● 和知名的容器(例如PicoContainer、Spring)集成

● 从Netty平滑的迁移到MINA, Netty是MINA的前辈。

MINA版本

Mina 的 API 当前主要有三个分支,分别是:

2.0.x 目前处于 SVN trunk 上的版本, Mina 社区对该版本的 API 进行了全新的设计

1.1.x 为当前用于产品开发的版本,适用于 5.0 以上的 JDK ,最新版本为 1.1.5

1.0.x 是 1.1.x 的 JDK 1.4 的兼容版本,最新版本为 1.0.8

这里将要介绍的是 2.0.x 版。虽然当前的稳定版本还是 1.1.x ,但是按照 Mina 团队之前的开发计划, 2.0.x 即将在 08 年夏季正式发布,并且在 2.0.x 中对 Spring 等 IoC 的集成进行了简化,添加了基于 OGNL 的 JMX 远程管理支持,使用基于 Java Annotation 的全新 API 大大简化了状态机编程,新的基于 Apache APR 的基础 I/O 组件促进了进一步的效率提升(据官方评测, APR 的效率较之 Sun NIO 要高出约 10%)。由于这一系列的重大改进,使得 2.0.x 成为十分令人期待的一个版本,无论是 Mina 新手还是老用户,如果你对这个项目抱有兴趣,便很有必要提前对这个版本进行一些了解。

首先让我们对异步 I/O 做一些基本的了解。异步 I/O 模型大体上可以分为两种,反应式( Reactive )模型和前摄式( Proactive )模型:

传统的 select / epoll / kqueue 模型,以及 Java NIO 模型,都是典型的反应式模型,即应用代码对 I/O 描述符进行注册,然后等待 I/O 事件。当某个或某些 I/O 描述符所对应的 I/O 设备上产生 I/O 事件(可读、可写、异常等)时,系统将发出通知,于是应用便有机会进行 I/O 操作并避免阻塞。由于在反应式模型中应用代码需要根据相应的事件类型采取不同的动作,最常见的结构便是嵌套的 if {...} else {...}  或 switch ,并常常需要结合状态机来完成复杂的逻辑。

前摄式模型则恰恰相反。在前摄式模型中,应用代码主动地投递异步操作而不管 I/O 设备当前是否可读或可写。投递的异步 I/O 操作被系统接管,应用代码也并不阻塞在该操作上,而是指定一个回调函数并继续自己的应用逻辑。当该异步操作完成时,系统将发起通知并调用应用代码指定的回调函数。在前摄式模型中,程序逻辑由各个回调函数串联起来:异步操作 A 的回调发起异步操作 B ,B 的回调再发起异步操作 C ,以此往复。

Reactor 和 Proactor 同为事件驱动 I/O 模型,其本质区别在于事件触发时机: Reactor 在 I/O 设备就绪,即可以立即执行 I/O 调用而无需阻塞时触发,只有这时才可以放心大胆的执行 I/O 调用;而 Proactor 则允许在任意时刻发起 I/O 调用请求,并在 I/O 调用完成时触发事件。

Proactor 可以直接利用系统提供的 aio 、 IOCP 等异步 I/O 机制实现。不过鉴于一时之间各种平台上 aio 接口实现的兼容性、功能、性能等方面的表现都还比较不靠谱,常见平台里还是 Win32 IOCP 对 Proactor 的原生支持最好。当系统不提供原生的异步 I/O 机制时,也可以使用 Reactor 模拟实现。相关内容可参见这篇文章。MINA 正是借由 Java NIO 的 Reactor 实现的模拟 Proactor 模型。 Boost.Asio 的 Proactor 内核在非 NT Win32 平台上也是利用select() / kqueue() / epoll 等 Reactor 模拟实现的。

Reactor 按照事件触发方式又可分为 level-triggered (LT) 和 edge-triggered (ET) 两种,其区别详见 epoll 的 man page 。传统的 select() / poll() 都属于 LT Reactor ; kqueue() 则是 ET Reactor ; epoll 是个两面派, LT/ET 语义通吃。

前摄式模型相较于反射式模型往往更加难以编程。然而在具有原生异步 I/O 支持的操作系统中(例如支持 IO Completion Port 的 Win32 系统),采用前摄式模型往往可以取得比反应式模型更佳的效率。在没有原生异步 I/O 支持的系统中,也可以使用传统的反应式 API 对前摄式模型予以模拟。在现代的软硬件系统中,使用 epoll 和 kqueue 的前摄式模型实现同样可以轻松解决 C10K 问题。前摄式模型的一个显著优势是在实现复杂逻辑的时候不需要借助于状态机。因为状态机已经隐含在由回调串联起来的异步操作链当中了。如果上述内容难以理解,可以参考 Boost.Asio,这是一个相当优秀的跨平台 C++ 前摄式 I/O 模型实现。

user guide:

Part I - Basics

Chapter 1 - Getting Started

Chapter 2 - Basics

Chapter 3 - Service

Chapter 4 - Session

Chapter 5 - Filters

Chapter 6 - Transports

Chapter 7 - Handler

Part II - MINA Core

Chapter 8 - Acceptor

Chapter 9 - Connector

Chapter 10 - IoBuffer

Chapter 11 - Codec Filter

Chapter 12 - Executor Filter

Chapter 13 - SSL Filter

Chapter 14 - Logging Filter

Part III - MINA Advanced Chapter 15 - Debugging Chapter 16 - State Machine Chapter 17 - Proxy Chapter 18 - JMX Integration Chapter 19 - Spring Integration

java mina性能_高性能Java网络框架 MINA相关推荐

  1. java queues 性能_鸟瞰 Java 并发框架

    (给ImportNew加星标,提高Java技能) 来自:唐尤华 https://dzone.com/articles/a-birds-eye-view-on-java-concurrency-fram ...

  2. java 解析器_高性能Java解析器实现过程详解

    如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...

  3. c 与java 反射性能_谈谈Java 反射的快慢

    [相关学习推荐:java基础教程] 反射到底是好是坏 说到Java 中的反射,初学者在刚刚接触到反射的各种高级特性时,往往表示十分兴奋,甚至会在一些不需要使用反射的场景中强行使用反射来「炫技」.而经验 ...

  4. java 内存管理_高性能Java代码之内存管理

    本文通过几个方面,来介绍Java代码的内存管理. 有的代码,GC根本就回收不了,直接系统挂掉.GC是一段程序,不是智能,他只回收他认为的垃圾,而不是回收你认为的垃圾. GC垃圾回收: Grabage ...

  5. java substring 性能_《Java程序性能优化》subString()方法的内存泄露

    String的构造 首先了解下String的构造,String内部使用char [] value 来存储字符. 需要注意 offset和count在1.7已经没有了. /** The value is ...

  6. 【 C++ 技术】 C++ 高性能服务器网络框架设计细节

    作者:范蠡  原文:C++ 高性能服务器网络框架设计细节 前言 这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序.需要注意的是一般大型服务器,其复杂程度在于其业务, ...

  7. java 反射 性能_java高性能反射及性能对比

    java编程中,使用反射来增强灵活性(如各类框架).某些抽象(如各类框架)及减少样板代码(如Java Bean). 因此,反射在实际的java项目中被大量使用. 由于项目里存在反射的性能瓶颈,使用的是 ...

  8. java 高性能缓存_高性能Java缓存----Caffeine

    简单介绍 Caffeine是新出现的一个高性能的Java缓存,有了它完全可以代替Guava Cache,来实现更加高效的缓存:Caffeine采用了W-TinyLFU回收策略,集合了LRU和LFU的优 ...

  9. java beanutils 性能_对比BeanUtils、PropertyUtils、BeanCopier的性能消耗

    主要代码 定义2个bean对象: public class copyPropertiesData1 { private Integer id; public Integer getId() { ret ...

最新文章

  1. 工作经验到底是个什么东东?工作经验从哪里来?
  2. Matlab 中常用的直线与点形表示属性
  3. 如何从一个对话框弹出单文档视图
  4. 服务器mysql如何添加数据库文件,如何在使用MySQL作为嵌入式服务器时创建数据库文件...
  5. 到了姥姥家我在小点点c++
  6. 自定义loading加载
  7. python持久层框架_SQLAlchemy
  8. Mac安装protobuf 流程
  9. 微软智能语音多情感技术升级,晓晓中文语音突破14种风格
  10. mysqldump对mysql数据库的影响
  11. java cat_java应用监控之CAT简介
  12. 【听课笔记】复旦大学遗传学_08遗传分析方法
  13. 谷歌翻译 onebox 升级
  14. 租用国外服务器兴起的背景
  15. python分三行将你的学号姓名班级_python第三次作业——叶耀宗
  16. MacBook Pro(13 英寸,2011 年末)A1278 安装Winows11无声音问题解决(WIN10和WIN11同样的解决方法)
  17. 请问一下我这里显示非法字符是哪里出问题哎
  18. 算法分析与设计第五章作业
  19. MSCKF 2.0 理论推导以及能观性分析
  20. Qt 错误提示1: invalid use of incomplete type ‘***‘

热门文章

  1. 计算机语言安装不上,安装程序包的语言不受系统支持,详细教您如何解决Office2010安装时语言不受系统支持...
  2. 网络编程除了socket之外还有什么方式
  3. Vue开发者工具Vue.js devtools Vue开发者工具安装步骤 包含Vue2 和 Vue3
  4. 安卓设备互相投屏_傲软投屏安卓下载|傲软投屏app安卓版v1.7.4下载 _当游网
  5. html css点击展开列表,html+js+css实现点击展开显示
  6. Linux拷贝服务器文件夹到本地
  7. 瑞友天翼虚拟化系统7.0 瑞友天翼远程接入
  8. 第2章 GAN初步:2.4 生成人脸图像
  9. VS 2010中文正式版
  10. Linux命令+shell脚本大全:查看文件内容