深入理解Apache Mina (4)---- IoFilter和IoHandler的区别和联系
2009-09-16 00:00:00 来源:WEB开发网到此我们就可以明白了IoFilter是一个数据收发和转化的装置,而 IoHandler则是一个单一的业务处理装置,你的所有业务逻辑都应该写在这个类中。如果没有在IoService中配置IoFilter,那么在 IoHandler中接收到的数据是一个ByteBuffer,你需要在你的IoHandler(业务层)中完成数据的转化,但是这样就破坏了Mina中各个组件层的关系,这样你的程序结构就不在清晰,因此建议在使用Mina时将数据的转化(即二进制与对象之间的转换放在IoFilter层来处理)。在 Mina中必须要配置IoHandler,因为Mina中提供的IoService中的bind方法必须要有一个IoHandler,因此 IoHandler不能省略。
到这里对于IoFilter和IoHandler的内容已经讲述完毕,下面的内容是对我在开发中遇到的一些问题的一些总结,顺便也给自己以前的问题写出答案:
(1)IoHandler和IoHandlerCommand的区别和联系。
IoHandler和IoHandlerCommand是两个接口,在开发中经常遇到的他们两个现类分别是IoHandlerAdpater和 IoHandlerChain,IoHandlerAdpater的子类ChainedIoHandler和IoHandlerChain结合使用可以实现多个逻辑功能,IoHandlerChain代表IoHandlerCommand)是业务逻辑的处理单元,而ChainedIoHandler(代表 Iohandler)则是处理这些逻辑单元的组件。因此它们的区别是:IoHandler是刀俎,而IoHandlerCommand则是鱼肉。他们的一般用法如下:
Java代码
IoHandlerChain chain = new IoHandlerChain();// 创建逻辑处理组件
chain.addLast("first", new FistCommand);// 添加逻辑组件单元一
chain.addLast("second", new SecondCommand);// 逻辑组件单元二
ChainedIoHandler chained = new ChainedIoHandler(chain);// 创建逻辑组件执行模块
chained.messageReceived(session, message);// 当messageReceived触发该事件
(2)IoFilter和IoHandler可以同时使用吗?
IoFilter和IoHandler由于分工不同,因此他们需要同时使用,但是这不是绝对的,在Mina
的IoService中可以不配置IoFilter,但是必须配置IoHandler。但是,这不是提倡的方式,
因为这破坏的mina的分层结构,因此建议在使用Mina的时候同时使用IoFilter和
IoHandler。
(3)IoFilter和IoHandlerCommand/IoHandler的区别和联系。
这个问题的答案请参考问题(1)和(2)给出的解释。
(4)IoHandlerAdpater和IoFilterAdpater的区别和联系。
IoHandlerAdpater和IoFilterAdpater一个是业务逻辑层的监听器,一个数据传输层的监
听器,他们的区别就是IoHandler和IoFilter的区别,这个在上面已经讨论清楚了,不在
详细说明。
(5)IoFilterChainBuilder和ChainedIoHandler的区别和联系。
关于这个问题的讨论会在后续的文档中给出。
- ››apache设置域名绑定 以及绑定不起作用的排查
- ››apache rewrite将指定URL转向指定的几个服务器
- ››apache配置文件httpd.comf部分参数说明
- ››Apache+Mysql+PHP+phpMyAdmin+Mac OS X 10.7 Lion...
- ››深入理解JAR包
- ››apache+tomcat负载均衡_项目实例
- ››apache mysql php 源码编译使用
- ››深入分析Volatile的实现原理
- ››深入理解Flash Player的应用程序域(Application ...
- ››深入理解flash函数(AS2)
- ››Apache添加mod_aspdotnet.so支持ASP.NET配置指南
- ››Apache中改变php.ini的路径
更多精彩
赞助商链接