Mina2.0(IoFilterChain的实现)——抛砖引玉

12 篇文章 0 订阅

 thomescai http://blog.csdn.net/thomescai(转载请保留)

概要:文本参考自uniseraph的《[mina指南]诡异的IoFilterChain实现》,写的太好了。一为抛砖引玉,二为小结。



(完整JavaOne2008_mina下载地址:http://download.csdn.net/detail/thomescai/3681036

DefaultIoFilterChain的构建:

    当session建立之后,会执行session.getService().getFilterChainBuilder().buildFilterChain(session.getFilterChain());

DefaultIoFilterChainBuilder的实现接口方法buildFilterChain()如下:

public void buildFilterChain(IoFilterChain chain) throws Exception {
	for (IoFilterChain.Entry e : this.entries)
		chain.addLast(e.getName(), e.getFilter());
	}
}

    DefaultIoFilterChainBuilder中的FilterChain列表entries全都加载到了Session中。


IoFilterChain初始化的典型代码:

IoAcceptor acceptor = new NioSocketAcceptor();  
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );  
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));  
acceptor.setHandler(  new TimeServerHandler() );  


初始化以后的结构图为:

     TimeServerHandler是什么时候被调用的?请看TailFilter的代码:

private static class TailFilter extends IoFilterAdapter {
		public void sessionCreated(IoFilter.NextFilter nextFilter,
				IoSession session) throws Exception {
			session.getHandler().sessionCreated(session);
		}
		public void sessionOpened(IoFilter.NextFilter nextFilter,
				IoSession session) throws Exception {
			session.getHandler().sessionOpened(session);
		}
		public void sessionClosed(IoFilter.NextFilter nextFilter,
				IoSession session) throws Exception {
			AbstractIoSession s = (AbstractIoSession) session;
			try {
				s.getHandler().sessionClosed(session);
			} finally {

			}
		}
	}
    TailFilter继承IoFilterAdapter是Filter的最后一个节点,TimeServerHandler继承IoHandlerAdapter,两个接口有相同的方法:sessionCreated(),sessionOpened()。Handler中的方法就是在这里被调用的。 


PS:Filter是一种责任链模式,mina的Filter是一个双向链表。简化版本可以参考:《仿mina filter示例




参考资料:

uniseraph:http://uniseraph.iteye.com/blog/228194《[mina指南]诡异的IoFilterChain实现》

east_java:http://japi.iteye.com/blog/605260仿mina filter示例


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值