DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

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


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



Published

Jul 7, 2011

Last Updated

Jul 7, 2011

Category

Tech

Tags

  • filter 1
  • Mina 7

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor