日期:2014-05-16  浏览次数:20973 次

apache MINA 源码级分析-[零]

最近,项目结束[项目主要是大量文件处理,所以自己用jdk5与spring做了很多线程池异步协作处理],

闲暇回顾哈NIO学习哈MINA;

?

首先我们需要了解MINA是什么?

?

我们首先需要明确第一步;一个网络通信到底可以抽象为几步;

?

方式一:从请求道响应看成一个流水线[呵呵想想福特汽车的流水线]

方式二:服务器接收客户请求,剩下处理[两个车间了哦]

方式三:服务器接收请求,读取客户信息,处理业务[三个车间了]

?

传统的:tomcat等服务器怎么处理的,简单看做方式二,一般开多线程[线程池]作为第二个车间

???????? 问题,线程多了上下文切换等问题,这个网络很多说这个问题的

现在的:grizzly,mina,netty等看做第三种,但是每个车间的写作才是关键,第二个车间 可以注册在第一个车间当来料处理第一个车间自动找到第二个,还有就是第二个车间可以通过回调函数

?

那看看MINA的结构[图片来源互联网]

?

?

从上图我们可以把MINA分作三个车间

1 车间 IoService----主要任务接受客户请求构造session[客户所有信息以及mina上下文信息],调用[异步]2车间处理

2 车间 IoProcessor[IoFilter包括在此车间]--主要任务IO处理意见filter执行然后 同步或者异步执行 3车间

3 车间 IoHandler--主要是我们的业务处理[mina使我们不关心网络,IO只关心这里]

但是实际情况望望比想象的复杂,如果MINA拿过来就用你很可能发现不是那样效率

特别是你的3车间 处理的连接数据库 或者链接其他网络信息,你的服务器编程blocking了

为什么?

请看下篇:

http://rrsy23.iteye.com/blog/422689

?

?

?

?

1 楼 drprise 2011-02-20  
哥们,有的地方的句子都读不通啊
2 楼 季铵盐 2012-06-20  
看了兄弟你的分析  似乎mina的思想和一些开源的譬如IOSERVER 差不多,我在自己的项目中也是采用的这个设计思想,不知兄弟是否研究过mina中IoHandler的对象是怎样派发处理session的(换句话就是创建的IoHandler怎么来维持的?),在我的项目中采用 的是把处理session的对象给池化! 有兴趣可以讨论下