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

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Apache Mina ,一个高性能 Java 异步并发网络通讯框架。利用 Mina 可以高效地完成以下任务: TCP/IP 和 UDP/IP 通讯 串口通讯 VM 间的管道通讯 SSL/TLS JXM 集成 IoC 容器集成( Spring 、 Pico 等) 状态机 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 ,以此往复。 Mina 便是一个前摄式的异步 I/O 框架。 注意贴主修正: 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 支持的系统中,

文档评论(0)

803322fw + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档