Mina中IoFilter解析

Mina最主要的工作就是把底层传输的字节码转换为Java对象,提供给应用程序;或者把应用程序返回的结果转换为字节码,交给底层传输。这些都是由IoFilter完成的,因此IoFilter是Mina的精髓所在。

    在Mina程序中,IoFilter是必不可少的;有了它,Mina的层次结构才异常清晰:

IoFilter   ----   消息过滤

IoHandler  ----   业务处理

    Filter,过滤器的意思。IoFilter,I/O操作的过滤器。IoFilter和Servlet中的过滤器一样,主要用于拦截和过滤网络传输中I/O操作的各种消息。在Mina 的官方文档中已经提到了IoFilter 的作用:

(1)记录事件的日志(Mina默认提供了LoggingFilter)

(2)测量系统性能

(3)信息验证

(4)过载控制

(5)信息的转换(主要就是编码和解码)

(6)和其他更多的信息

    IoService实例会绑定一个DefaultIoFilterChainBuilder---- 过滤器链,我们把自定义的各种过滤器(IoFilter)自由的插放在这个过滤器链上了,类似于一种可插拔的功能!

类结构

Mina中IoFilter解析_第1张图片
实现IoFilterAdapter的类有多个,但是我们使用最多的就是ProtocolCodecFilter----它是我们自定义编解码器的入口。

    在FilterChain中都是addLast()的方式添加在过滤链的最后面,这时候,把那个过滤器放在前面,就会先执行那个过滤器!

FilterChain中IoFilterChainBuilder实现过滤链,实际由java中的CopyOnWriteArrayList实现,初始化一个CopyOnWriteArrayList,mina中大量使用java.util.concurrent包下的内容,继承list接口,是一个适合开发过滤链的双向链表,保证并发安全

public class DefaultIoFilterChainBuilder implements IoFilterChainBuilder {

    private final static Logger LOGGER = LoggerFactory.getLogger(DefaultIoFilterChainBuilder.class);

    private final List entries;

    /**
     * Creates a new instance with an empty filter list.
     */
    public DefaultIoFilterChainBuilder() {
        entries = new CopyOnWriteArrayList();
    }
    ...................................
}

 

   FilterChain 中除了addLast()方法,还提供了addFirst(),addBefore()等方法供使用。它们的顺序如何,就看你的设置的位置了!

     同时发现,日志过滤器是根据IoSession的状态(创建、开启、发送、接收、异常等等)来记录会话的事件信息的!这对我们跟踪IoSession很有用。

 

你可能感兴趣的:(Mina中IoFilter解析)