一: IOFilter的作用
LoggingFilter记录所有事件和请求
ProtocolCodecFilter将到来的ByteBuffer转换成消息对象(POJO)
CompressionFilter压缩数据
SSLFilter增加SSL – TLS – StartTLS支持
二: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。
三:已经实现的相关类
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
相关推荐
### 关于Mina IoFilter与DefaultFilterChainBuilder的理解 #### Mina框架简介 Apache Mina是一个高度可伸缩、稳定并且具有丰富特性的网络应用程序框架,适用于开发高性能、高可靠性的网络应用程序。它支持多种传输...
在Apache Mina框架中,IoFilter是核心组件之一,用于拦截和过滤I/O操作中的各种信息,可以类比于Servlet中的过滤器。这些过滤器提供了强大的机制来控制数据的传输和处理流程。Apache Mina的IoFilter主要有以下作用:...
IoFilter(过滤器),用于数据的预处理和后处理;IoHandler(处理器),处理实际的业务逻辑。通过Mina,开发者可以快速构建出可扩展、高性能的网络应用。 SpringBoot是Spring框架的一个扩展,致力于简化Spring应用...
深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和联系 深入理解Apache_Mina_(5)----_配置Mina...
Apache Mina是一个强大的网络通信框架,专为基于TCP/IP和UDP/IP协议栈的应用设计。它提供了JAVA对象的序列化和虚拟机内部通信的功能,使得开发者能够迅速构建高性能、高可扩展性的网络应用。Mina的核心特性是其事件...
`IoFilter`是Mina事件处理链的一部分,允许开发者在数据传输前或后添加额外的处理逻辑,例如数据加密、解压缩或验证。过滤器可以串联起来,形成一个过滤器链,数据在到达IoHandler之前会经过这些过滤器。 `IoFilter...
IoFilter和IoHandler是MINA中的两个重要组件。IoHandler是处理网络事件的核心接口,它定义了接收到数据、连接建立、连接关闭等事件时需要执行的方法。IoFilter则是一个过滤器链,允许在数据传输到IoHandler之前对其...
3. **Mina API**:熟悉Mina的主要类和接口,如`IoSession`、`IoHandler`、`IoFilter`等,并学会如何在项目中使用它们。 4. **过滤器**:掌握Mina的过滤器机制,理解如何自定义过滤器以实现数据的编码、解码、安全...
- **类结构**:IoFilter是Mina中的过滤器模式实现,位于IoHandler和IoSession之间,用于预处理或后处理数据。 - **应用**:通过实现IoFilter接口,可以自定义数据处理逻辑,例如数据加密、压缩等。 ##### 2.3 ...
1. **了解MINA架构**:熟悉MINA的IoSession、IoFilter、IoHandler等核心组件及其职责。 2. **分析源码**:通过阅读MINA的源码,了解其内部处理流程,如读写事件的处理、过滤器链的工作方式等。 3. **编写简单的应用*...
Mina的IoFilter机制类似于Servlet中的Filter,用于在网络层与业务层之间添加额外的功能,如加密、压缩、日志记录等。IoFilter可以按需插入到处理链中,提供了一种灵活的方式来增强或修改网络数据流,而无需修改核心...
虽然原内容未详细介绍Mina实例,但基于IoService、IoFilter和IoHandler的组合使用,可以构建出复杂且高效的网络应用。例如,使用IoFilter进行数据编解码,使用IoHandler处理业务逻辑,结合IoAcceptor和IoConnector...
Mina的架构主要由几个关键组件构成,包括IoService、IoHandler、IoFilter,以及它们之间的交互机制。IoService充当了应用程序的入口,负责底层通信接入。IoHandler则聚焦于业务逻辑处理,无需关注实际的通信细节,只...
- **关键类和接口**:如IoAcceptor用于监听和接受连接,IoHandler处理网络事件,IoFilter接口定义了过滤器行为,IoSession代表网络连接。 - **配置文件**:可能包含配置服务器端口、线程池大小等信息的XML配置文件。...
你可以自定义过滤器,实现IoFilter接口,然后在FilterChainBuilder中配置这些过滤器。过滤器可以实现日志记录、性能监控、安全检查等各种功能,并按照定义的顺序执行。 **6. 异步处理与线程模型** Mina基于NIO(Non...
Mina(Java Multithreaded Network Application Framework)是一款开源的、用Java编写的网络通信框架。这个框架的主要目的是简化开发高性能、高可用性的网络应用程序。它提供了基于事件驱动的异步API,使得开发者...
- **过滤器体系**:MINA的IoFilter机制允许开发者插入自定义过滤器,实现数据的预处理或后处理,增强了灵活性和可扩展性。 - **异步模型**:MINA基于NIO(非阻塞I/O)实现,提供异步的网络通信,能更好地利用系统...
IoFilter是Mina中的中间件,用于增强或修改数据在IoSession和IoHandler之间的传输。开发者可以通过实现IoFilter接口,插入自定义的过滤逻辑,例如加密、压缩、日志记录等。IoFilter链的工作方式类似于Servlet过滤器...
3. **IoFilter**和**FilterChain**:MINA使用过滤器链来处理数据,允许在数据传输前或后进行预处理或后处理。IoFilter接口定义了过滤器的行为,而FilterChain则负责管理过滤器的执行顺序。 4. **ProtocolCodec**:...