mina基于reactor模式
参考文章:
http://libo20475.blog.163.com/blog/static/27140009200981352836598/ apache mina 研究
http://blog.csdn.net/gaolingep/article/details/4147697 mina研究-源代码
http://developer.51cto.com/art/201103/248125_1.htm 解析mina代码
http://lanmh.iteye.com/blog/1003933 mina工作流程
http://www.doc88.com/p-239796971134.html mina中文api
mina构架
IoService:
这个接口抽象了一切io操作,包括建立端口监听,io读写,负责底层通信接入
IoProcessor:
1.为IOService处理正真的I/O读写操作。IOService在某端口监听,当发生int selected = select();时,说明有建立连接的客户端请求,IOService会调用IOProcessor,将session和交给processor处理。
2.IOProcessor也会有一个int selected = select(1000);的阻塞,等待IO事件。
3.当I/O事件到达后,会把输入读入到一个BUF中session.getChannel().read(buf.buf())(Java NIO)。
IoFilter:
1.上面IOProcessor得到buf后,会交给 IOFilter处理,如果是读取IO则触发messageReceived方法。
2.IOFilter一般被包含在一个IoFilterChain中,是实现了责任链模式的一根链条。
IoHandler:(业务处理)
1.是拿到buf做处理的一个接口,是用户最终会面对的一个接口。
2.上面的IOFilter得到buf(以接收数据为例),IOFilter调用了IoHandler的messageReceived(s, message);方法。
主要接口
IoAcceptor: 服务端,实现了IoService接口
IoConnector: 客户端,实现了IoService接口
IoProcessor:负责处理IoSession,包括创建,移除,读写事件的处理
IoSession: 客户连接的抽象
IoFilter: 过滤消息或者说(通讯层的)消息处理,IoService与IoHandler间的桥梁
IoHandler: 消息处理
基本流程
1当IoService 实例创建的时候,同时一个关联在IoService 上的IoProcessor 池、线程池也被创建;
2当IoService 建立套接字(IoAcceptor 的bind()或者是IoConnector 的connect()方法被调用)时,IoService 从线程池中取出一个线程,监听套接字端口;
3当IoService 监听到套接字上有连接请求时,建立IoSession 对象,从IoProcessor池中取出一个IoProcessor 实例执行这个会话通道上的过滤器、IoHandler;
4当这条IoSession 通道进入空闲状态或者关闭时,IoProcessor 被回收。
http://blog.csdn.net/onafioo/article/details/7912059
很详细,关于mina线程的使用