mina handler和filter问题

jia520ying 2012-03-05 07:54:27
我有一个自定义的IoFilter,已经添加到acceptor里了,可是执行结果为什么总是先执行handler,再执行filter呢? 不是应该先执行过滤器,再执行处理类吗? 下面是代码,头疼!

server类

//添加过滤器
acceptor.getFilterChain().addLast("myfilter",new ReferenceCountingFilter(new MyIoFilter()));

// 绑定逻辑处理器
acceptor.setHandler(new ServerHandler());

---------------------------------------------------------------------------------------------------------

过滤器类
public class MyIoFilter implements IoFilter {
@Override
public void messageReceived(NextFilter arg0, IoSession arg1, Object arg2) throws Exception {
arg0.messageReceived(arg1,arg2);
System.out.println("filter messageReceived");
}

---------------------------------------------------------------------------------------------------------

处理类
public class ServerHandler implements IoHandler {
@Override
public void messageReceived(IoSession arg0, Object arg1) throws Exception {
System.out.println("handler messageReceived");
}
-------------------------------------------------------------------------------------------------------------

执行结果

filter init
filter onPreAdd
filter onPostAdd
handler sessionCreated
filter filterWrite
filter sessionCreated
handler sessionOpened
filter sessionOpened
handler messageSent
filter messageSent
handler exceptionCaught
filter exceptionCaught
handler sessionClosed
filter onPreRemove
filter onPostRemove
filter destroy
filter sessionClosed

---------------------------------------------------------------------------------------------------------

大家帮我看看,不是应该先输出 “filter sessionOpened” 再输出“handler sessionOpened”的吗?

谢谢,谢谢,谢谢大家了!
...全文
102 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia520ying 2012-03-07
  • 打赏
  • 举报
回复
哈哈,问题已经解决了! arg0.messageReceived(arg1,arg2);这个要在方法的最后面才行,不然filter的方法就不执行,直接跳到下一个filter的同名方法里去了!

啦啦啦 啦啦啦

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧