`

Mina IOFilter

 
阅读更多

 

 

一: IOFilter的作用

      LoggingFilter记录所有事件和请求

      ProtocolCodecFilter将到来的ByteBuffer转换成消息对象(POJO)

      CompressionFilter压缩数据

      SSLFilter增加SSL – TLS – StartTLS支持

 

二:IOFilter的类图和常用方法

       Mina_IoFilter

 

    IoFilter是MINA中的过滤器接口

       6个与IoFilter生命周期相关的方法;

       2个与IoSession请求相关的方法;

       7个与IoHandler事件相关的方法;

  

   

IoFilter生命周期事件

   

  

   

 

IoFilter与IoSession的请求

IoFilter有2个与IoSession接口相关的请求方法。当IoSession发出这两个请求后,将委托IoFilterChain来执行,实际上是由IoFilterChain容器中的一系列IoFilter来处理。

 

void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception; 当调用IoSession.write(Object)方法时,IoFilterChain中的过滤器将逐个被执行。

 

void filterClose( NextFilter nextFilter, IoSession session) throws Exception; 当调用 IoSession.close()方法时, IoFilterChain中的过滤器将逐个被执行。

 

IoFilter与ReferenceCountingFilter

ReferenceCountingFilter之所以称之为引用计数过滤器,是因为IoFilterChain容器内部维护的是Entry对象节点,当同一个IoFilter对象被多次添加到IoFilterChain中,IoFilterChain会创建一个新的Entry对象来封装它的,即同一个IoFilter对象可以在IoFilterChain内部被多个不同的Entry所引用。而ReferenceCountingFilter可以用来跟踪那些被多次添加到IoFilterChain容器的IoFilter对象。

 

• 什么时候会触发IoFilter的初始化方法init

同一个IoFilter对象可以被多次添加到IoFilterChain容器中,而IoFilter接口提供了init方法为过滤器做初始化操作,从程序业务逻辑的角度来说,同一个IoFilter对象即便被多次添加到IoFilterChain容器时应当仅仅初始化一次(当然这不是绝对的,这取决与框架的开发者的设计思路,显然MINA框架的设计者是这样认为的)。

 

当被ReferenceCountingFilter对象将要添加到IoFilterChain容器前,ReferenceCountingFilter的onPreAdd方法会先检测其中的引用计数字段count,当count为0时表示被包装的IoFilter对象还没有添加到IoFilterChain容器中,ReferenceCountingFilter的onPreAdd方法此时会先调用被包装的IoFilter对象的初始化方法init,再调用被包装的IoFilter对象的预添加方法,之后会令count字段自增,表示IoFilter对象已经被添加IoFilterChain容器中一次了。当被ReferenceCountingFilter对象再次添加到IoFilterChain容器,count字段会继续自增,用来表示被装饰的IoFilter对象添加的次数。

 

需要注意的是,当ReferenceCountingFilter对象从IoFilterChain容器中彻底移除后(即添加了多少次,同样需要移除多少次,直到count字段恢复为0),并再次添加到IoFilterChain容器时,由ReferenceCountingFilter所包装的IoFilter对象会重新初始化。

 

• 什么时候会触发IoFilter的释放方法destroy

由ReferenceCountingFilter的初始化策略可以得知,当ReferenceCountingFilter对象被多次添加到IoFilterChain容器,那么也需要执行同样次数的移除操作才能将其彻底从IoFilterChain容器中清除(实际是将IoFilterChain中Entry对象所引用的IoFilter移除)。

如代码清单所示,当ReferenceCountingFilter对象从IoFilterChain容器中移除时,ReferenceCountingFilter的onPostRemove方法会先调用被包装的IoFilter对象的onPostRemove方法,之后再令引用字段count自减,表示IoFilter对象的引用已经从IoFilterChain容器中移除一次。直到count字段恢复为0时才会调用ReferenceCountingFilter所包装的IoFilter对象的释放方法destroy。

 

三:已经实现的相关类

    

Filter class Description
Blacklist BlacklistFilter Blocks connections from blacklisted remote addresses
Buffered Write BufferedWriteFilter Buffers outgoing requests like the BufferedOutputStream does
Compression CompressionFilter  
ConnectionThrottle ConnectionThrottleFilter  
ErrorGenerating ErrorGeneratingFilter  
Executor ExecutorFilter  
FileRegionWrite FileRegionWriteFilter  
KeepAlive KeepAliveFilter  
Logging LoggingFilter Logs event messages, like MessageReceived, MessageSent, SessionOpened, ...
MDC Injection MdcInjectionFilter Inject key IoSession properties into the MDC
Noop NoopFilter A filter that does nothing. Useful for tests.
Profiler ProfilerTimerFilter Profile event messages, like MessageReceived, MessageSent, SessionOpened, ...
ProtocolCodec ProtocolCodecFilter A filter in charge of encoding and decoding messages
Proxy ProxyFilter  
Reference counting ReferenceCountingFilter Keeps track of the number of usages of this filter
RequestResponse RequestResponseFilter  
SessionAttributeInitializing SessionAttributeInitializingFilter  
StreamWrite StreamWriteFilter  
SslFilter SslFilter  
WriteRequest WriteRequestFilter  

 

From https://yanglu.gitbooks.io/mina/content/minazhong_de_guo_lv_qi_lei.html

 

 

分享到:
评论

相关推荐

    关于MinaIoFilter源码的个人理解

    ### 关于Mina IoFilter与DefaultFilterChainBuilder的理解 #### Mina框架简介 Apache Mina是一个高度可伸缩、稳定并且具有丰富特性的网络应用程序框架,适用于开发高性能、高可靠性的网络应用程序。它支持多种传输...

    深入理解Apache Mina (2)---- 与IoFilter相关的几个类

    在Apache Mina框架中,IoFilter是核心组件之一,用于拦截和过滤I/O操作中的各种信息,可以类比于Servlet中的过滤器。这些过滤器提供了强大的机制来控制数据的传输和处理流程。Apache Mina的IoFilter主要有以下作用:...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    IoFilter(过滤器),用于数据的预处理和后处理;IoHandler(处理器),处理实际的业务逻辑。通过Mina,开发者可以快速构建出可扩展、高性能的网络应用。 SpringBoot是Spring框架的一个扩展,致力于简化Spring应用...

    关于apache Mina Server

    深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和联系 深入理解Apache_Mina_(5)----_配置Mina...

    java-mina通信框架详解.docx

    Apache Mina是一个强大的网络通信框架,专为基于TCP/IP和UDP/IP协议栈的应用设计。它提供了JAVA对象的序列化和虚拟机内部通信的功能,使得开发者能够迅速构建高性能、高可扩展性的网络应用。Mina的核心特性是其事件...

    Mina框架入门介绍

    `IoFilter`是Mina事件处理链的一部分,允许开发者在数据传输前或后添加额外的处理逻辑,例如数据加密、解压缩或验证。过滤器可以串联起来,形成一个过滤器链,数据在到达IoHandler之前会经过这些过滤器。 `IoFilter...

    mina2资料-各种教程

    IoFilter和IoHandler是MINA中的两个重要组件。IoHandler是处理网络事件的核心接口,它定义了接收到数据、连接建立、连接关闭等事件时需要执行的方法。IoFilter则是一个过滤器链,允许在数据传输到IoHandler之前对其...

    3本mina教程和mina帮助文档

    3. **Mina API**:熟悉Mina的主要类和接口,如`IoSession`、`IoHandler`、`IoFilter`等,并学会如何在项目中使用它们。 4. **过滤器**:掌握Mina的过滤器机制,理解如何自定义过滤器以实现数据的编码、解码、安全...

    mina2学习笔记

    - **类结构**:IoFilter是Mina中的过滤器模式实现,位于IoHandler和IoSession之间,用于预处理或后处理数据。 - **应用**:通过实现IoFilter接口,可以自定义数据处理逻辑,例如数据加密、压缩等。 ##### 2.3 ...

    mina源码+例子mina-2.0.0-M6.zip

    1. **了解MINA架构**:熟悉MINA的IoSession、IoFilter、IoHandler等核心组件及其职责。 2. **分析源码**:通过阅读MINA的源码,了解其内部处理流程,如读写事件的处理、过滤器链的工作方式等。 3. **编写简单的应用*...

    Mina官方介绍

    Mina的IoFilter机制类似于Servlet中的Filter,用于在网络层与业务层之间添加额外的功能,如加密、压缩、日志记录等。IoFilter可以按需插入到处理链中,提供了一种灵活的方式来增强或修改网络数据流,而无需修改核心...

    Apache Mina 2 完全自学手册

    虽然原内容未详细介绍Mina实例,但基于IoService、IoFilter和IoHandler的组合使用,可以构建出复杂且高效的网络应用。例如,使用IoFilter进行数据编解码,使用IoHandler处理业务逻辑,结合IoAcceptor和IoConnector...

    Mina 框架研究与实现

    Mina的架构主要由几个关键组件构成,包括IoService、IoHandler、IoFilter,以及它们之间的交互机制。IoService充当了应用程序的入口,负责底层通信接入。IoHandler则聚焦于业务逻辑处理,无需关注实际的通信细节,只...

    mina源代码学习提供下载

    - **关键类和接口**:如IoAcceptor用于监听和接受连接,IoHandler处理网络事件,IoFilter接口定义了过滤器行为,IoSession代表网络连接。 - **配置文件**:可能包含配置服务器端口、线程池大小等信息的XML配置文件。...

    基于spring的Mina框架

    你可以自定义过滤器,实现IoFilter接口,然后在FilterChainBuilder中配置这些过滤器。过滤器可以实现日志记录、性能监控、安全检查等各种功能,并按照定义的顺序执行。 **6. 异步处理与线程模型** Mina基于NIO(Non...

    Mina 实例 包含jar包

    Mina(Java Multithreaded Network Application Framework)是一款开源的、用Java编写的网络通信框架。这个框架的主要目的是简化开发高性能、高可用性的网络应用程序。它提供了基于事件驱动的异步API,使得开发者...

    mina-core-2.0.0-RC1

    - **过滤器体系**:MINA的IoFilter机制允许开发者插入自定义过滤器,实现数据的预处理或后处理,增强了灵活性和可扩展性。 - **异步模型**:MINA基于NIO(非阻塞I/O)实现,提供异步的网络通信,能更好地利用系统...

    mina 服务器简介,个人感觉不错

    IoFilter是Mina中的中间件,用于增强或修改数据在IoSession和IoHandler之间的传输。开发者可以通过实现IoFilter接口,插入自定义的过滤逻辑,例如加密、压缩、日志记录等。IoFilter链的工作方式类似于Servlet过滤器...

    mina2 源码 mina

    3. **IoFilter**和**FilterChain**:MINA使用过滤器链来处理数据,允许在数据传输前或后进行预处理或后处理。IoFilter接口定义了过滤器的行为,而FilterChain则负责管理过滤器的执行顺序。 4. **ProtocolCodec**:...

Global site tag (gtag.js) - Google Analytics