一、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)
IoAcceptor acceptor = new SocketAcceptor();//建立基于socket通信的
Sep2.Server的属性设置
SocketAcceptorConfig cfg = new SocketAcceptorConfig();
cfg.setReuseAddress(true);
// 启用SO_REUSEADDR 套接字选项(作用:允许不同server socket可以监听同一个端口)
cfg.getFilterChain().addLast("codec",
new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
//获取过滤器链,并将指定的过滤器添加到过滤器链的最后位置。
cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
//获取过滤器链,并将日志过滤器添加到过滤器链的最后位置。
Sep3.绑定地址(address)和业务处理器(handler)到server。
acceptor.bind(new InetSocketAddress( SERVER_PORT ),
new ServerSessionHandler( ), cfg );
// 绑定address和handler, SERVER_PORT为端口号。
2.Client端
Sep1.创建连接器(IoConnector)
SocketConnector connector=new SocketConnector();//创建一个基于Socket通信的链接器
Sep2.Client端的属性设置
//创建连接器设置
SocketConnectorConfig cfg=new SocketConnectorConfig();
//设置连接超时时间
cfg.setConnectTimeout(CONNECT_TIMEOUT);
//添加过滤器链
cfg.getFilterChain().addLast("myChin", new ProtocolCodecFilter(new
TextLineCodecFactory()));
Sep3.绑定地址(address)和业务处理器(handler)到客户端
//建立链接
connector.connect(new InetSocketAddress(HOSTNAME,PORT),new MinaClientSessionHandler(),cfg);
3.编写业务处理类
在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。为了简化 Handler 类,MINA 提供了 IoHandlerAdapter 类,此类仅仅是实现了 IoHandler 接口,但并不做任何处理。
分享到:
相关推荐
Apache Mina是一个基于Java的网络通信框架,专为高性能、高可用性和可扩展性而设计。...在深入学习Mina的过程中,理解IoService及其子类的工作原理,以及如何结合IoHandler实现业务逻辑,对于掌握Mina框架至关重要。
**Mina 学习笔记(入门)** Apache Mina 是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务器端应用。它提供了一种简单的方式来处理网络协议,如TCP/IP和UDP/IP,以及SSL/TLS加密的连接。在本学习...
《mina学习笔记》 Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是TCP和UDP协议的应用。MINA 提供了一种与网络协议无关的API,...
### MINA学习笔记 #### MINA概述 MINA是一个用Java编写的高性能、轻量级的网络通信框架,主要用于简化网络编程的复杂性。它支持多种传输协议(如TCP/IP和UDP/IP),并且提供了一套丰富的API来处理网络通信相关的...
在MINA的学习笔记中,记录的所有API通常会包括以下几个核心部分: 1. **IoSession**: 这是MINA的核心接口,代表了客户端和服务器之间的连接。IoSession提供了读写数据、管理连接状态、获取会话属性等功能。例如,`...
在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...
MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。 此文档80多页,是方便Mina上手的文档。
学习Mina不仅涉及网络编程的基本概念,还需要掌握如何利用它的事件驱动模型和非阻塞I/O机制来提高系统的可伸缩性和性能。通过不断实践和深入学习,开发者可以更好地掌握Mina框架,构建出高效、稳定和可维护的网络...
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
1. **下载使用的Jar包**:在开始Mina2.0的学习之前,你需要从Apache官网或其他可靠的源下载Mina的最新版本库。通常,这包括核心库和其他依赖库,如slf4j用于日志记录。 2. **工程创建配置**:创建一个新的Java项目...
Apache Mina是一个强大的开源框架,专门用于构建高性能、高可扩展性的网络应用程序。Mina2.0是其一个重要的版本,提供了许多改进和新特性,使得开发者能够更轻松地处理网络通信任务,尤其是在Java NIO(Non-blocking...
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
### Mina初步学习笔记知识点概览 #### 一、Mina简介及下载配置流程 **Mina**,全称**Multipurpose Infrastructure Networked Applications**,是Apache基金会开发的一个高性能网络应用框架,旨在帮助开发者构建高...