1. NIO概述
NIO是Java New IO的简称,在JDK1.4版本中引入该API,从那时起,就被广泛的应用。通过使用她,可以通过非阻塞的方式进行IO操作。
Java.nio.*包含了如下核心结构:
- Buffers - 用于基本类型数据的容器
- Charsets - Unicode代码单元序列和字节序列之间的对应映射关系的容器
- Channels - 表示I/O操作到实体(所能连接到的实体,如硬件设备、文件和网络套接字等)的连接
- Selectors - 提供可选的和可复用的非阻塞IO
2. 特性
MINA是一个简洁但功能齐全的网络应用程序框架,她有如下特性:
- 为各种网络传输类型提供统一的API,包含:
- 基于Java NIO的TCP/IP和UDP/IP
- 基于RXTX的串行通信(RS232)
- 同一个JVM内部的不同协议处理程序的管道通信
- 自定义传输类型
- 提供了类似于Servlet过滤器的Filter接口作为框架拓展
- 低层次和高层的接口
- 低层次:使用字节缓冲ByteBuffer
- 高层次:使用自定义的消息对象和编码解码器
- 高可定制的线程模型
- 单线程
- 单线程池
- 多个线程池(即SEDA架构)
- 支持通过使用Java 5的SSLEngine 直接操作SSL、TLS和StartTLS,
- 过载防护和流量节流
- 使用Mock对象进行单元测试
- 基于JMX的框架管理
- 通过StreamIOHandler提供基于流的IO操作
- 可以很好的整合知名框架,如PicoContainer和Spring
- MINA从前身Netty平滑迁移而来
3. 起步
(1) 下载
从该传送门下载MINA的最新发布版
(2) MINA发布版内容
下载完文件后,解压该tar.gz或者zip包到本机,下载到的文件解压开之后应该包含如下内容(补充:现在MINA分为两个包,一个是apache-mina-2.0.7-bin.zip,不包含下面的src文件夹;一个是apache-mina-2.0.7-src.zip,不包含dist和lib文件夹,因此两个都下载下来并解压到一个一起,才能完整组成如下):
--/mina-2.0.0
|
|- dist
|- docs
|- lib
|- src
|- LICENSE.txt
|- LICENSE.jzlib.txt
|- LICENSE.ognl.txt
|- LICENSE.slf4j.txt
|- LICENSE.springframework.txt
|- NOTICE.txt
(3)内容详情
disk - 包括了MINA库的jar包
docs - 包含了API文档和依赖的库的情况
lib - 包含了使用MINA所需要的所有的jar包
除了这些之外,根目录还包含了一些许可文件和提醒文件
(补充:scr - 包含MINA的源代码)
(4)执行第一个MINA程序(补充:也可参考
MINA 2.0实例--TimeServer实现),
发布包也已经下载好了,那么,现在就来运行第一个MINA实例:
将如下jar包放入classpath中:
- mina-core-2.0.0.jar
- mina-example-2.0.0.jar
- slf4j-api-1.5.11.jar
- slf4j-log4j12-1.5.0.jar
- log4j-1.2.15.jar
对于日志使用的提示:
Log4J 1.2的用户: slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.x
Log4J 1.3的用户: slf4j-api.jar, slf4j-log4j13.jar, and Log4J 1.3.x
java.util.logging的用户: slf4j-api.jar and slf4j-jdk14.jar
重要提醒: 请确定你使用了正确的和你的日志框架匹配的slf4j-*.jar
比如,slf4j-log4j12.jar 和 log4j-1.3.x.jar 是不能够正常一起使用的, 会使你的日志框架失灵
如果你暂时不需要使用日志功能,你可以使用slf4j-nop.jar来屏蔽日志功能,或者使用slf4j-simple.jar来使用简单的日志功能在命令提示行里面输入以下命令:command
>java org.apache.mina.example.gettingstarted.timeserver.MinaTimeServer
就可以启动服务了,接下来就通过telnet来看看这个实例,输入以下telnet的命令
telnet 127.0.0.1 9123
将如下jar包放入classpath中:这样就成功运行了第一个MINA实例,你可以通过org.apache.mina.example包自己尝试其他的MINA实例。
4.小结
(补充:这个小结,貌似应该是第二章的小结,有可能是MINA官方没有注意到,不小心写错了,截止目前,这两个是一样的)
这一章,我们了解了一下MINA客户端和服务端应用程序的基本体系结构,也简单的触及了一些TCP和UDP的客户端和服务端的实例的实现。
在接下来的章节,将讨论MINA的核心结构和先进主题。