首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

MINA 学习札记

2012-11-13 
MINA 学习笔记一、MINA简介?????? Apache MINA(Multipurpose Infrastructure for Network Applications)是A

MINA 学习笔记

一、MINA简介

?

????? Apache MINA(Multipurpose Infrastructure for Network Applications)是Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA版本支持基于Java NIO技术的TCP/UDP应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA? 所支持的功能也在进一步的扩展中。
????? 目前正在使用MINA的软件包括有:Apache Directory Project,AMQP( Advanced Message Queuing Protocol),RED5 Server(Macromedia Flash Media RTMP),ObjectRADIUS,Openfire等等。
????? Apache直属MINA的子项目有:FTPServer,AsyncWeb,SSHD。

?

二、MINA的用途

?

????? MINA暂时分为1.x和2.x两个主版本。两版本之间的主要区别在于1.x使用传统IO方式,而2.x使用NIO。
????? NIO比传统IO的优势在于NIO是无阻塞的,而传统IO是阻塞的,所以2.x版本性能会有所提高。
????? 由于NIO比传统IO更加难于理解,实现更加复杂,如果想自己开发一个基于NIO的高性能服务器会有所难度,并且会承担一定得风险。所以这也是为什么我们会使用MINA框架的原因,利用她我们可以简单的,快速的开发一个高并发,高稳定的服务器。
????? MINA封装复杂的NIO实现,利用抽象的事件驱动的异步API来支持客户的开发,这也是为什么利用MINA可以进行快速开的原因之一。


????? Apache MINA也称为:
????? ? NIO 框架库
????? ? 客户端、服务器框架库
????? ? 一个网络套接字库


????? 2.x 版本支持如下:
????? ? 为不同的传输类型提供了统一的API
????? ? 通过Java NIO提供TCP/IP和UDP/IP支持
????? ? 通过RXTX提供串口通讯(RS232)
????? ? In-VM管道通讯
????? ? 过滤器作为一个扩展特性
????? ? 高度定制化线程模型
????? ? 使用Java 5 SSL引擎提供沙盒(Out-of-the-box)SSL·TLS·StartTLS 支持
????? ? 超载保护和传输流量控制
????? ? JMX管理能力

?

三、环境准备


????? ? MINA开发需要的jar包,到官方网站http://mina.apache.org/downloads.html 下载
????? ? MINA的依赖包slf4j。请到http://www.slf4j.org/download.html 下载 slf4j包,slf4j项目解压后有很多的文件,我们只需要其中的 slf4j-ap和 slf4j-simple这两个jar文件。具体版本需要配置下载的MINA版本。
????? ? JDK,最低为1.5版本。
????? ? Java开发环境例如Eclipse、MyEclipse或者NetBeans。

?

四、MINA基本类的描述

?

????? ? IoService:应用程序入口。IoService负责底层通讯接入,IoAcceptor(服务器端)和IoConnector(客户端)是IoService的扩展接口。
????? ? IoAcceptor:相当于网络应用程序中的服务器端。IoAcceptor()可以同时启动多个端口,每个端口可以指定不同的handler 和filter,但是一个服务端只有一个监听器。
????? ? IoConnector:相当于客户端
????? ? IoSession:当前客户端到服务器端的一个连接实例
????? ? IoHandler:业务处理逻辑。该接口有五个实现类ChainedIoHandler, DemuxingIoHandler, IoHandlerAdapter, SingleSessionIoHandlerDelegate, StreamIoHandler。其中ChainedIoHandler, DemuxingIoHandler, StreamIoHandler实现了接口,并继承了IoHandlerAdapter,IoHandlerAdapter实现了接口的所有方法,但是在方法中并没有做什么,我们可以继承它,根据需要有选择的重写其中的方法。
????? ? IoFilter:过滤器用于悬接通讯层接口与业务层接口。IoFilter是MINA核心构造之一,扮演非常重要的角色。它过滤所有的I/O事件和请求,这些事件和请求由IoService最终到达IoHandler。

??????? 过滤器的生命周期:一个过滤器只有当它处于过滤器链中时才会起过滤作用。

??????? 当添加一个过滤器到过滤器链时:
????????????? Sep1.ReferenceCountingIoFilter在第一时间调用init()方法。
?????? ?????? Sep2.调用onPreAdd方法来告知程序,一个过滤器将被添加到过滤器链中。
????????????? Sep3.当过滤器被添加到过滤器链后,所有的事件和I/O请求都会通过过滤器到达IoHandler。
????????????? Sep4.调用onPostAdd方法来告知程序,一个过滤器已被添加到过滤器链中。
????????????? Sep5.当onPostAdd方法 抛出异常时,过滤器将会从过滤器链中被删除,如果这个过滤器是整个过滤器链中的最后一个,那么ReferenceCountingIoFilter将会调用destory()销毁该过滤器。

?????? 当从过滤器链中移除过滤器时:
???????????? Sep1.调用onPreRemove方法来告知程序,一个过滤器将会从过滤器链中被移除。
???????????? Sep2.过滤器从过滤器链中被移除后后,所有的事件和I/O请求都不会通过该过滤器到达IoHandler。
???????????? Sep3.调用onPostRemove方法来告知程序,一个过滤器已经从过滤器链中被移除。
???????????? Sep4.当这个过滤器是过滤器链中的最后一个过滤器时,那么ReferenceCountingIoFilter将会调用destory()销毁该过滤器。


????? ? IoServiceListener监听器。IoServiceListener监听器的作用是监听其对应的IoService(IoAcceptor和IoConnector)中的事件。

?

五、MINA开发的一般步骤

?

??? 1.Server端:

?

??? Sep1.创建接收器(IoAcceptor)

?

//建立链接connector.connect(new InetSocketAddress(HOSTNAME,PORT),new MinaClientSessionHandler(),cfg);


?

? ? 3.编写业务处理类

?

??? ? 在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。为了简化 Handler 类,MINA 提供了 IoHandlerAdapter 类,此类仅仅是实现了 IoHandler 接口,但并不做任何处理。

热点排行