Mina的几个重要接口:
IoAcceptor 相当于网络应用程序中的服务器端
IoConnector相当于客户端
IoSession当前客户端到服务器端的一个连接实例
IoHandler业务处理逻辑
IoFilter过滤器用于悬接通讯屋接口和业务层接口
IoService是应用程序的入口,相当于我们前面据说的IoAcceptor,后者是前者的扩展接口。IoService可以添加多个IoFilter,这些IoFilter符合责任链模式并由IoProcessor线程负责调用。IoAcceptor还提供绑定某个通讯端口及取消绑定的接口。Mina提供了Socket通讯方式,基于数据提出报文通讯的DatagramAcceptor,基于管道通讯的VmPipeAcceptor,基于串口通讯接入方式以及你自行实现IoService接口的自定义的通讯方式。上图中最右端的IoHandler是业务处理模块。在业务处理类中我们不需要关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写Handler类就是使用Mina开发网络应用的重心所在,其它的通讯方面的细节问题都由Mina来帮我们处理。为了简化Handler类,Mina提供了IoHandlerAdapter类,该类仅仅是实现了IoHandler接口,并不做任何处理。
一个 IoHandler 接口中具有如下一些方法(摘自 MINA 的 API 文档):
void exceptionCaught(IoSession session, Throwable cause)
//当接口中其他方法抛出异常未被捕获时触发此方法
void messageReceived(IoSession session, Object message)
//当接收到客户端的请求信息后触发此方法.
void messageSent(IoSession session, Object message)
//当信息已经传送给客户端后触发此方法.
void sessionClosed(IoSession session)
//当连接被关闭时触发,例如客户端程序意外退出等等.
void sessionCreated(IoSession session)
//当一个新客户端连接后触发此方法.
void sessionIdle(IoSession session, IdleStatus status)
//当连接空闲时触发此方法.
void sessionOpened(IoSession session)
//当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发
上图中的IoFilter是IoService和IoHandler之间的桥梁,你可以用它来实现所有你想实现的过滤器方法。
IoHandler中有一个方法是messageReceive,该方法的第二个参数是Object类型,哪这个具体类型就是由IoFilter来决定的。
比如我们添加一个new ProtocolCodecFilter(new TextLineCodecFactory()),就是将来自客户端输入的信息转换成一行行的文本后传递给IoHandler,因此在IoHandler中可以直接将msg对象强制转换成String对象。如果我们不提供任何过滤器,则第二个参数的类型就是一个byte的缓冲区,对应的类是org.apache.mina.common.ByteBuffer。Mina自身带有一些常用的过滤器,如LoggingFilter(日志记录),BlachListFilter(黑名单过滤),CompressionFilter(压缩),SSLFilter(SSL加密)等。
Mina除了可以用来开发网络服务端应用程序,还可以使用IoConnector来连接各样的网络服务程序。
-------------------------我是分隔线-------------------------------------
Mina采用非阻塞通讯模式:
a)NIO设计背后的基石:反应器模式 :用于事件多路分离和分派的体系结构模式。反应器模式的核心功能如下:
将事件多路分用
将事件分派到各自相应的事件处理程序
b)NIO的非阻塞I/O机制是围绕选择器和通道构建的。
选择器类(Selector)是Channel的多路复用器。Selector类将传入客户机请求多路分用并将它们分派到各自的请示处理程序。
通道类(Channel)表示服务器和客户机之间的一种通讯机制,一个通道负责处理一类请示/事件。
NIO是基于事件的IO架构,最基本的思想是:有事件我会通知你,你再去做与此事件相关的事情。而且NIO的主线程只有一个,不像传统的模型,需要多个线程以应对客户端请示,也减轻了JVM的工作量。
c)当Channel注册到Selector以后,经典的调用方法如下:
while(condition){
int n = selector.select(TIMEOUT);
if(n==0) continue;
for(Iterator it = selector.selectedKeys().iterator();it.hasNext();){
if(key.isAcceptable()) doAcceptable(key);
if(key.isConnectable())doConnectable(key);
if(key.isValid() && key.isReadable()) doReadable(key);
if(key.isValid() && key.isWritable()) doWritable(key);
it.remove();
}
}
NIO有一个主要的类Selector,该类类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事,当有事件发生时,它会通知我们,传回一组SelectKey,我们读取这些key,就会获取我们刚刚注册过的socketchannel然后我们从这个Channel中读取数据,接着我们就处理这些数据。
分享到:
相关推荐
在学习Apache Mina时,首先要理解其核心组件和设计模式。Mina的核心组件包括Session、Filter、ProtocolCodec等。Session代表了客户端和服务器之间的连接,Filter则提供了数据处理链,ProtocolCodec则用于将应用层的...
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发场景,如何设计和实现高效的网络协议,以及如何利用...
学习Apache Mina时,理解以上关键点非常重要。通过编写一个简单的示例,你可以更好地了解如何设置项目、创建服务端和客户端、定义过滤器以及处理网络事件。同时,不要忘记考虑异常处理和性能优化,这些在实际项目...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...
Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。...通过学习和使用"Mina帮助文档",开发者可以更好地理解和利用这个框架,构建出高效、稳定的网络应用。
学习Apache Mina,你需要理解以下关键知识点: 1. **事件驱动模型**:Mina基于NIO(非阻塞I/O)构建,利用了Java的Selector机制,实现了一种高效的事件驱动模型。这种模型使得服务器可以同时处理大量并发连接,提高...
学习Apache Mina时,理解其事件驱动模型至关重要。Mina基于NIO(非阻塞I/O),通过事件回调来处理网络事件,比如连接建立、数据读写、连接关闭等,这样可以实现高效的并发处理。 为了更深入地掌握Apache Mina,你...
学习Apache Mina不仅可以提升你的网络编程技能,还能让你对服务端开发有更深入的理解。通过阅读这份手册,你将能够掌握如何利用Mina构建高性能的网络应用,例如数据库代理、聊天服务器或者文件传输服务。无论你是...
通过深入学习和实践这个Apache Mina入门Demo,你将掌握如何利用Mina构建网络应用,并了解其核心特性和工作原理,这对于从事Java网络编程或者需要处理大规模并发连接的开发者来说是非常有价值的。
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...
**学习Apache Mina的主要内容:** 1. **基础知识**:理解Java NIO的基本原理和操作,这是使用Mina的基础。 2. **Mina API**:熟悉Session、Filter、FilterChain等核心组件的使用方法。 3. **过滤器开发**:学习如何...
apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...
标题中的“Apache MINA框架相关资料”涵盖了对MINA框架的全面学习材料,包括中文参考手册、源码分析、API文档和与Spring框架的整合指南。 1. **中文参考手册**(Apache_Mina_Server_2.0中文参考手册V1.0.pdf):这...
### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络...在未来的学习过程中,我们将更深入地探索 MINA 的高级特性,如会话管理、错误处理、安全性和扩展性等。
Apache Mina Server 2.0 是一款高性能、...此外,下载的压缩包文件“minaTest”可能包含示例代码或测试项目,可以作为学习和实践Apache Mina的好材料。通过这些实践,你可以加深对Mina的理解,并将其应用到实际项目中。
Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...
通过这个项目,开发者可以学习到如何将Mina的异步I/O能力与Spring的容器管理及依赖注入机制结合,构建出健壮且易于维护的网络服务端程序。这包括理解Mina的事件模型、Spring的bean管理和网络编程的最佳实践。同时,...
很详细的描述了apache mina 框架,对于那些对于英文不是很懂得人,这简直就是福音啊,哈哈