`
laserdance
  • 浏览: 90371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习Apache Mina

阅读更多

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 Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    apache Mina的完整学习资料

    apache mina的入门完整学习资料,附加中文参考手册。

    Apache mina2学习笔记DEMO

    这个是我学的apache mina2.0学习笔记的实例

    apache mina 中文版 学习资料(很详细的哟)

    很详细的描述了apache mina 框架,对于那些对于英文不是很懂得人,这简直就是福音啊,哈哈

    apache-mina-2.0.4架包及源码各pdf学习教程

    apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...

    Apache Mina 2 完全自学手册

    Apache Mina 2 完全自学手册

    apache mina 学习笔记三(子项目FtpServer)

    NULL 博文链接:https://tangmingjie2009.iteye.com/blog/2036903

    Apache mina源代码框架解析

    写这篇文档主要是想对刚接触Mina的人讲解一些Mina的基本知识,由浅入深,一步一步的学习Mina思想的精髓。这里只是简单的涉及一点,不会对其做很深入的探讨。但是Mina的服务器和客户端在很大的程度上都是一样,所以...

    Apache MINA使用案例源代码

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的...

    Apache Mina Server 2.0 中文参考手册

    帮助你快速学习Mina框架,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架。Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用。

    Apache Mina Server 2.0 参考手册

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...

    mina sslfilter大用法

    这是我学习apache mina框架中研究ssl过滤器u做的一个测试的例子。希望对于刚刚学习mina框架的朋友有所帮助。如果有什么疑问可以发送到我的emai:pengli.bj@163.com与我联系

    Apache Mina2 整理资料

    MINA-2.0.0-M4.chm(英文)中文的实在是没有)+Mina2.0学习笔记(修订版).doc+Apache_Mina_Server_2.0中文参考手册V1.0.pdf+MINA框架新人指南.pdf

    Apache_Mina2.0学习笔记

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...

    mina 框架学习文档

    apache mina 框架的学习文档,通过此文档可以基本了解mina框架。

    一个Apache MINA使用案例源代码

    摘要:Java源码,网络相关,Apache 一个Apache MINA使用案例源代码,消息接收的例子,显示接收到的消息,通过这个例子你可以学习一下会话创建、打开会话,与sessionCreated最大的区别是它是从另一个线程处调用的、会话...

    Apache-Mina-Server-2.0中文参考手册V1.0.docx

    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、高...

    MINA学习资料大全

    MINA开发文档总结,有如下内容Apache_Mina_Server_2.0中文参考手册V1.0.pdf 深入理解Apache_Mina.pdf MINA2官方教程翻译.pdf Mina2源码分析.pdf

    Apache_Mina.rar

    各种Apache_Mina的学习资料,非常全,可以下下来好好看

Global site tag (gtag.js) - Google Analytics