日期:2014-05-16 浏览次数:20872 次
最近,项目结束[项目主要是大量文件处理,所以自己用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
?
?
?
?