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);