MinaService

3710684617977243578.jpg

(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/

原文地址:https://www.cnblogs.com/alipayhutu/p/2478050.html