Apache Mina开发手册之二
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs
四、NIO概述
NIO API是Java 1.4版引入的,NIO的意思是非阻塞的I/O通信。
要知道Mina的NIO是基于NIO-1开发的,而在JDK 7中引入了NIO-2的库,但Mina还没有从NIO-2中获得各方面的提升,因此Mina还是基于NIO-1的。
虽然Oracle官方是把NIO的N作为New的解释,但业界普遍把这个N解释为Non-Blocking。
Mina目前分为1.x和2.x两个主要版本,两个版本的主要区别在于1.x使用传统I/O方式,而2.x使用NIO方式。由于NIO是无阻塞的,而传统IO是阻塞的,所以2.x版本性能会有所提高。但是由于NIO比传统IO更加难于理解,实现更加复杂,想自己开发基于NIO的高性能服务器难度较大,所以这也是选择Mina框架的原因。
Mina 3.x目前还在开发阶段,到时候会通过NIO-2进一步提升通信性能。
java.nio.*包中包含了几个关键的结构:
1)Buffer:数据的容器
2)Charset:字节和Unicode编码的容器转换器
3)Channel:封装了I/O操作的实体的连接表现
4)Selector:提供了可选择的、多分复用的非阻塞I/O
5)Regexps:提供了一些操作正则表达式的工具
使用Mina的优点:
1)隐藏了开发网络程序的复杂性,提供了统一的编程接口;
- 用Java NIO实现TCP/IP和UDP/IP通信
- 用RXTX实现RS232串口通信
- VM级的管道通信
- 实现自己的传输协议
2)与Servlet相似的过滤器接口,支持扩展
3)低层和高层API
- 低层:使用字节缓冲ByteBuffer
- 高层:使用用户定义的消息对象和编码
4)高可定制的线程模型
- 单线程
- 单个线程池
- 多个线程池(即SEDA)
5)通过Java 5的SSLEngine实现开箱即用的SSL、TLS和StartTLS
6)过载防护与流量限制
7)使用mock对象使用单元可测试性
8)JMX管理能力
9)通过StreamIoHandler支持流I/O
10)可与PicoContainer或Spring框架相集成
11)可从Mina 1.x和Netty平滑迁移
五、Mina应用程序架构
1、基于Mina应用程序的架构
基于Mina的应用程序的架构通常是这样的:
可以看出,Mina是应用程序和网络层之间的胶水层,可以通过Mina完成TCP、UDP通信,甚至是串口RS-232C通信。Mina屏蔽了网络编程的复杂性,你只需专心于处理业务逻辑。
下面我们继续深入Mina框架:
广义上来讲,基于Mina的应用程序可以划分为三层:
1)I/O Service:I/O服务,执行实际的I/O通信。
2)I/O Filter Chain:I/O过滤器链,把字节过滤/转换成所需的数据结构,反之亦然。
3)I/O Handler:I/O句柄,放置实际的业务逻辑。
因此,要想创建基于Mina的应用程序,你必须:
1)创建I/O服务
可选择已有的服务(*Acceptor)或创建自己的I/O服务。
2)创建过滤器链
可选择已有的过滤器或创建自定义的过滤器,用于转换请求/响应的数据
3)创建I/O句柄
写业务逻辑,处理不同的消息