MINA简介
Apache MINA是一个网络应用程序框架,可帮助用户轻松开发高性能和高可扩展性的网络应用程序。 它通过Java NIO在各种传输(如TCP / IP和UDP / IP)上提供抽象·事件驱动的异步API。
Apache MINA经常被称为:
1.NIO框架或者类库
2.客户端和服务器端的框架或者类库
3.一个网络和Scocket通信类库
MINA的特征
MINA是一个简单但功能齐全的网络应用程序框架,提供:
1.对于各种不同的传输类型提供了同一的实现API:
- TCP/IP 和 UDP/IP 通过java的NIO实现
- 串口通讯(RS232) 通过RXTX
- 虚拟机内的管道通信
- 可扩展实现自定义的传输协议
2.Filter接口作为一个可扩展的点,类似于Servlet的过滤器
3.低级和高级的API:
- 低级:使用ByteBuffers
- 高级:使用自定义的消息对象和编解码器
4.高度自定义的线程模式
- 单线程
- 一个线程池
- 多个线程池(即SEDA)
5.SSL·TLS·StartTLS支持使用java5的SSL引擎(SSLEngine)
6.过载屏蔽和流量节流
7.使用模拟对象进行单元测试
8.JMX可管理性
9.通过StreamIoHandler支持基于流的I/O操作
10.与众所周知的容器式框架集成,比如PicoContainer和Spring
11.来自Netty的平滑迁移,这是Apache MINA的前身
MINA的使用场景
- 当你没有特殊的性能要求时,MINA可能是很好的选择,因为它很容易实现服务器端和客户端的开发,代码简洁。
- 百万级的用户连接,相对稳定;
- MINA已经被广泛使用,而且Apache的很多项目也是基于MINA的;
- MINA对现有的很多协议都已经实现支持:HTTP,XML,TCP,LDSP,DHCP,NTP,DNS,XMPP,SSH,FTP...,所以MINA不仅可以当做NIO的框架,而且还可以看做很多网络协议的实现。
MINA应用架构
在这里,我们可以看到,MINA是您的应用程序(无论是客户端还是服务器)和底层网络层之间的粘合,可以基于TCP,UDP,VM内通信或甚至RS-232C串行协议,提供对应的API操作。
您只需在MINA之上设计您的应用程序,而无需处理所有复杂的网络层。
让我们更深入了解细节。 以下图片显示了MINA内部的更多内容,以及每个MINA组件的作用:
从广义来说,基于MINA的应用程序分为3层:
- I/O Service - 执行实际的I/O操作
- I/O Filter Chain - 将字节过滤/转换为所需的数据结构,反之亦然
- I/O Handler - 这里是实际的业务逻辑处理
所以,为了创建基于MINA的应用程序,你不得不做到以下:
1.创建一个I/O service - 选择已经可用的Services(*Acceptor)或者创建你自己的
2.创建一个Filter Chain(过滤器链)- 选择已经存在的Filters或者创建一个自定义的Filter(过滤器)用于转换request(请求数据)/respone(回复数据)
3.创建一个I/O Handler - 此处编写业务逻辑,处理不同的消息信息
至此就完成了整个流程!
你也可以看看具体的客户端和服务端开发过程:
- 服务端开发
- Android客户端开发
当然,MINA提供的不仅如此,而且你可以关注其他方面,比如消息编码/解码,如何扩大网络配置等等...