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

  • 相关阅读:
    史上最全最新java面试题合集二(附答案)
    史上最全最新Java面试题合集一(附答案)
    修改vsftpd的默认根目录/var/ftp/pub到其他目录
    重置密码解决MySQL for Linux错误:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    虚拟机下的Linux连接校园网上网问题
    CentOS7 安装Chrome
    CentOS7 卸载Firefox
    100个写作高级词
    【二叉搜索树】的详细实现(C++)
    【红黑树】的详细实现(C++)
  • 原文地址:https://www.cnblogs.com/alipayhutu/p/2478050.html
Copyright © 2020-2023  润新知