(1) IoService:一类I/O服务,是对于服务器端接受连接和客户端发起连接两类行为的一个抽象。
- 1个IoService对应N个sessions(共用1个IoHandler), 1个IoService还可对应N个IoServiceListener.
- TransportMetaData(底层元数据信息)、IoServiceListener(见下)、IoHandler(见下)、IoSession(见下)、broadcast
- IoService接口可以用来添加多个IoFilter,这些IoFilter符合责任链模式并由IoProcessor线程负责调用。
(2) IoServiceListener,是IoService的忠实监听器
- 监听与该IoService相关的所有事件。
- 例如,服务被激活、服务闲置、服务被销毁、会话创建、会话销毁等。
======================================================
小结:(1)与(2)是service层面的。
======================================================
(3) IoProcessor,大管家,负责调会话过滤器和IoHandler进行具体处理
- 用于为IoSession执行具体的I/O操作。一个Processor可以对应N个IoSessions,一个IoSession总是对应一个IoProcessor。
- IoProcessor在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与 IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService上的过滤器,并在过滤器链之后调用IoHandler。例如,add()用于将指定会话加入到IoProcessor,让它负责处理与此会话相关的所有I/O操作。
- 例如,加session、删session、更改session、向session里强写数据、更新trafficControle信息
(4) IoHandler: I/O事件真正得到处理的地方
- Mina中的所有I/O事件,最终都是由IoHandler来处理的,这些事件都是由IoProcessor发出来的,处理IoService手下所有sessions的事件handler。最终都会进入的,业务层最终进行处理的地方。
- 例如,会话创建、会话打开、会话关闭、会话闲置、消息收到/发出、
======================================================
小结:(3)与(4)是IoSession层面的,调用次序有先后。
======================================================
(5) IoSession: 会话
- 每个会话都有一个过滤器链(IoFilterChain),通过IoFilterChainBuilder来负责构建
- 会话相关的数据通过IoSessioanDataStructureFactory来提供,每个会话都有一张AttributeMap和WriteRequestQueue。
- 如果说IoService/IoProcessor负责连接的生死、事件的转发,那具体的执行还是在具体的IoSession当中的,详见新博文。
[洞庭散人的Mina源码详解,讲的非常不错]http://www.cnblogs.com/phinecos/archive/2008/12/03/1347052.html
[偶尔发现了这个,mark一下]http://2006zhouxinfeng.blog.163.com/blog/static/5024021620115155106736/