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 Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
apache mina的入门完整学习资料,附加中文参考手册。
这个是我学的apache mina2.0学习笔记的实例
很详细的描述了apache mina 框架,对于那些对于英文不是很懂得人,这简直就是福音啊,哈哈
apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...
Apache Mina 2 完全自学手册
NULL 博文链接:https://tangmingjie2009.iteye.com/blog/2036903
写这篇文档主要是想对刚接触Mina的人讲解一些Mina的基本知识,由浅入深,一步一步的学习Mina思想的精髓。这里只是简单的涉及一点,不会对其做很深入的探讨。但是Mina的服务器和客户端在很大的程度上都是一样,所以...
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的...
帮助你快速学习Mina框架,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架。Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用。
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...
这是我学习apache mina框架中研究ssl过滤器u做的一个测试的例子。希望对于刚刚学习mina框架的朋友有所帮助。如果有什么疑问可以发送到我的emai:pengli.bj@163.com与我联系
MINA-2.0.0-M4.chm(英文)中文的实在是没有)+Mina2.0学习笔记(修订版).doc+Apache_Mina_Server_2.0中文参考手册V1.0.pdf+MINA框架新人指南.pdf
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...
apache mina 框架的学习文档,通过此文档可以基本了解mina框架。
摘要:Java源码,网络相关,Apache 一个Apache MINA使用案例源代码,消息接收的例子,显示接收到的消息,通过这个例子你可以学习一下会话创建、打开会话,与sessionCreated最大的区别是它是从另一个线程处调用的、会话...
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、高...
MINA开发文档总结,有如下内容Apache_Mina_Server_2.0中文参考手册V1.0.pdf 深入理解Apache_Mina.pdf MINA2官方教程翻译.pdf Mina2源码分析.pdf
各种Apache_Mina的学习资料,非常全,可以下下来好好看