IoConnector和IoSession的关系以及上挂Filter的区别

来源:互联网 发布:南京秦淮网络问政 编辑:程序博客网 时间:2024/04/29 13:40
IoConnector是Mina框架下的网络接收端,当它与服务端建立连接后返回一个代表连接的IoSession,具体过程如下:
    IoConnector connector = new NioSocketConnector(50);
    ConnectFuture connFuture = connector.connect(new InetSocketAddress(ip, port));
    boolean b = connFuture.awaitUninterruptibly(10000);
    if (b) {
        IoSession session = connFuture.getSession();
        ...
    }
也就是用IoConnector的connect方法得到一个ConnectFuture,再用此ConnectFuture的getSession方法得到IoSession。

本质上Filter是与连接(也就是IoSession)相关联的,但由于下面的两个原因,导致需要在Connector上定义filter链。
首先是filter链需要在连接建立前就要定义好,这样才能实现“一建立连接就做某事”这种功能,在已经存在的Session(也就是连接)上挂filter显然无法达到这种效果;
其次是Connector每与服务端建立一个连接就会生成一个Session,且这些Session的行为具有很大的相似性,也就是上面的filter一般也是一样的,这样为多个session定义相同的一组filter显然是一种dirty work;

简而言之,就是Connector上挂filter链属于“配置”定义,而session上挂filter链属于“运行时”定义,当连接关闭(断开)后,这个filter链也就不存在了。

下面是二者挂filter链的具体方法。
对于Connector:
    DefaultIoFilterChainBuilder chain = IoConnector.getFilterChain();
    chain.addLast(String name, IoFilter filter);
对于session:
    IoFilterChain chain = session.getFilterChain();
    chain.addLast(String name, IoFilter filter);
原创粉丝点击