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

本文介绍了Mina框架中IoConnector的作用及使用方法,并详细解释了如何通过IoConnector建立连接并获取IoSession。同时,文章还探讨了在Connector与Session上挂载filter链的区别及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值