转:
1.MINA框架简介
MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。
MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。
2.MINA框架的常用类
类NioSocketAcceptor用于创建服务端监听;
类NioSocketConnector用于创建客户端连接;
类IoSession用来保存会话属性和发送消息;
类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
方法 定义
sessionCreated() 当会话创建时被触发
sessionOpened() 当会话开始时被触发
sessionClosed() 当会话关闭时被触发
sessionIdle() 当会话空闲时被触发
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
messageRecieved() 当接收到消息后被触发
messageSent() 当发送消息后被触发
3.服务端应用开发示例
下面将以MINA2.0M1版本为基础,通过一个范例来演示一下如何使用MINA框架进行开发。开发环境为jdk6.0,开发工具NetBeans6.0,所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M1.jar。
首先定义一个业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。代码如下:
public class TimeServerHandler extends IoHandlerAdapter
{
@Override
public void sessionCreated(IoSession session) {
//显示客户端的ip和端口
System.out.println(session.getRemoteAddress().toString());
}
@Override
public void messageReceived( IoSession session, Object message ) throws Exception
{
String str = message.toString();
if( str.trim().equalsIgnoreCase("quit") ) {
session.close();//结束会话
return;
}
Date date = new Date();
session.write( date.toString() );//返回当前时间的字符串
System.out.println("Message written...");
}
}
再定义一个类MinaTimeServer用来启动服务端:
public class MinaTimeServer
{
private static final int PORT = 9123;//定义监听端口
public static void main( String[] args ) throws IOException
{
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));//指定编码过滤器
acceptor.setHandler( new TimeServerHandler() );//指定业务逻辑处理器
acceptor.setDefaultLocalAddress( new InetSocketAddress(PORT) );//设置端口号
acceptor.bind();//启动监听
}
}
4.测试
首先运行MinaTimeServer,启动服务端,接着在命令行运行“telnet 127.0.0.1 9123”,来登录,这时会看到服务端输出如下:
2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log
/10.64.2.137:4140 IP和端口号
信息: CREATED
2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log
信息: OPENED 在客户端输入回车,在客户端可以看到服务端返回当前的时间:
Thu Feb 21 16:20:14 CST 2008
服务端输出:
2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log
信息: RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A] 接收收到回车符
Message written...
2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log
信息: SENT: HeapBuffer[pos=0 lim=29 cap=30: 54 68 75 20 46 65 62 20 32 31 20 31 36 3A 32 30...]
2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log
信息: SENT: HeapBuffer[pos=0 lim=0 cap=0: empty] 5.客户端开发示例
首先定义类TimeClientHandler来处理消息接收事件:
class TimeClientHandler extends IoHandlerAdapter{
public TimeClientHandler() {
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
System.out.println(message);//显示接收到的消息
}
}
接着定义MinaTimeClient类用于连接服务端,并向服务端发送消息:
public class MinaTimeClient {
public static void main(String[] args) {
// 创建客户端连接器.
NioSocketConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast( "logger", new LoggingFilter() );
connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); //设置编码过滤器
connector.setConnectTimeout(30);
connector.setHandler(new TimeClientHandler());//设置事件处理器
ConnectFuture cf = connector.connect(
new InetSocketAddress("127.0.0.1", 9123));//建立连接
cf.awaitUninterruptibly();//等待连接创建完成
cf.getSession().write("hello");//发送消息
cf.getSession().write("quit");//发送消息
cf.getSession().getCloseFuture().awaitUninterruptibly();//等待连接断开
connector.dispose();
}
}
6.总结
通过上述示例可以了解到:使用MINA框架来开发的网络应用程序代码结构更清晰;MINA框架完成了底层的线程管理;MINA内置的编码器可以满足大多数用户的需求,省去了开发人员消息编码解码的工作。具称使用MINA开发服务器程序的性能已经逼近使用 C/C++ 语言开发的网络服务。因此,建议在网络应用程序开发过程中尝试使用MINA框架来提高我们的开发效率和应用程序的执行效率。
分享到:
相关推荐
下面将详细介绍这些关键知识点: 1. **Apache Mina**: - **事件驱动模型**:Mina基于NIO(非阻塞I/O)和事件驱动模型,允许高效地处理大量并发连接。它通过监听器接口来处理各种网络事件,如连接建立、数据读写、...
本文将详细介绍如何在Spring Boot项目中整合Mina来实现串口通信。 首先,我们需要了解Spring Boot的基本架构。Spring Boot的核心特性是自动配置和起步依赖,这使得我们无需编写大量的XML配置文件,只需通过注解就能...
1. **中文参考手册**(Apache_Mina_Server_2.0中文参考手册V1.0.pdf):这是一份详尽的MINA框架使用手册,用中文详细介绍了MINA的核心概念、设计模式以及如何创建服务器和客户端。它包含了各种MINA组件的用法,如...
4. **Apache+Mina+ABC.pdf**:这个文档可能是对Mina的基础知识进行简单介绍的教程,"ABC"通常代表"基础、基本、入门",所以这本书可能会涵盖Mina的基本概念、安装步骤、第一个Mina应用的创建等内容,为初学者提供一...
3. **API详解**:详细阐述MINA提供的各种接口和类,以及它们的使用方法。 4. **最佳实践**:分享在实际项目中优化MINA应用的经验和技巧。 5. **示例代码**:通过实例代码展示MINA如何处理常见的网络通信问题。 **...
`Apache Mina 2.0.8 API.CHM`是MINA的API文档,CHM(Compiled HTML Help)格式是一种常见的Windows帮助文件,包含了MINA所有类、接口和方法的详细说明。开发者可以通过查阅这个文件,快速了解MINA提供的功能,找到所...
以下将详细介绍Mina、Spring和Hibernate的整合过程及其实现原理。 1. Mina简介 Mina(Java NIO-based Network Application Framework)是基于Java NIO(非阻塞I/O)的网络应用程序框架。它提供了一个事件驱动、异步...
下面将详细介绍Mina的基本概念、核心接口以及如何入门。 **一、Mina入门** 1. **下载使用的Jar包**: 要使用Mina,首先需要下载其发布的jar包,这些包通常包含了Mina的核心库和其他依赖库。你可以从Apache官方...
本文将详细介绍如何利用MINA框架实现在Java中进行串口通信,并分享在调试过程中的一些关键知识点。 首先,我们需要理解MINA的基本工作原理。MINA采用了非阻塞I/O模型,它允许单个线程处理多个连接,从而提高了...
文章链接未给出具体内容,但通常会详细介绍如何根据实际需求设计编码解码器的逻辑,可能包括如何处理不同数据结构、错误处理、以及性能优化等方面。 总之,自定义编码解码器是Mina中实现特定网络协议的关键步骤。...
本节将详细介绍如何从零开始构建一个简单的Mina应用程序,涵盖从下载所需JAR包到编写服务端和客户端程序的全过程。 ##### 第一步. 下载使用的Jar包 为了开始Mina的应用开发,首先需要下载以下必要的库: 1. **Mina ...
- Mina1_类.pdf可能涵盖了MINA框架的基础类和组件介绍。 - Mina3_与IoHandler相关的几个类.pdf和Mina2_与IoFilter相关的几个类.pdf将深入探讨IoHandler和IoFilter的具体实现类及其功能。 - Mina4_IoFilter和...
这些文档对于理解和使用MINA2框架至关重要,以下将详细介绍其中的知识点。 1. **MINA2框架概述**:MINA2是一个网络通信框架,它提供了一套高级抽象层,如IoSession、Filter、ProtocolCodec等,使得开发者可以专注于...
1. **Mina简介**:首先,会介绍Mina的基本概念,包括其设计目标、主要功能和它在开发网络应用中的角色。 2. **环境准备**:设置开发环境,包括添加Mina的依赖到项目中,这可能涉及到Maven或Gradle的配置。 3. **...
1. **Apache Mina介绍**:Mina是一个轻量级的、高性能的框架,用于开发网络服务。它简化了网络编程,允许开发者使用Java NIO(非阻塞I/O)来创建高效的服务器端和客户端应用。 2. **Spring MVC概述**:Spring MVC...
API文档通常会详细介绍每个类、接口和方法的功能,以及如何在项目中正确使用它们。 “源码剖析”这部分可能会深入MINA的内部实现,讲解核心组件的工作原理,这对于想要进行性能优化或定制化开发的开发者来说是非常...
文档首先会介绍MINA的基本架构,包括Acceptor、Session、Filter和Handler等核心组件。Acceptor负责监听网络连接,当新的连接到来时,会创建一个新的Session来处理这个连接。Session代表了与客户端的连接状态,包括...
这个例子将详细介绍如何在Android环境中实现MiNa进行文本传输。 ### 1. MiNa核心概念 MiNa基于Java的NIO(Non-blocking I/O)模型,提供了事件驱动、非阻塞I/O的网络通信库。主要包含以下几个核心组件: - **...
本节将详细介绍如何使用Mina来实现一个简单的客户端与服务器之间的字符串传输案例。 ##### 步骤1:环境搭建 首先,需要下载Mina的库文件并将其添加到项目中。例如,可以下载`mina-core-2.0.0-M1.jar`,并将该JAR...