设为首页 收藏本站
查看: 1671|回复: 0

[经验分享] Apache Mina(二)

[复制链接]
发表于 2015-7-30 15:42:39 | 显示全部楼层 |阅读模式
  在mina的源码,整个框架最核心的几个包是 :


  • org.apache.mina.core.service :IoService、IoProcessor、IoHandler、IoAcceptor、IoConnector
  • org.apache.mina.core.session
  • org.apache.mina.core.polling
  • org.apache.mina.transport.socket
  IoService Base interface for all IoAcceptors and IoConnectors that provide I/O service and manage IoSessions.
      它是所有 IoAcceptor 和 IoConnector 的基接口,对于一个 IoService,有哪些信息需要我们关注呢?


  • 底层的元数据信息 TransportMetadata,比如底层的网络服务提供者(NIO,ARP,RXTX等)。(除此方法之外,其它方法在 AbstractIoService 得以实现。)
  • 通过这个服务创建一个新会话时,新会话的默认配置 IoSessionConfig。
  • 此服务所管理的所有会话。
  • 与这个服务相关所产生的事件所对应的监听者(IoServiceListener)。
  • 处理这个服务所管理的所有连接的处理器(IoHandler)。
  • 每个会话都有一个过滤器链(IoFilterChain),每个过滤器链通过其对应的 IoFilterChainBuilder来负责构建。
  • 由于此服务管理了一系列会话,因此可以通过广播的方式向所有会话发送消息,返回结果是一个WriteFuture集,后者是一种表示未来预期结果的数据结构。
  • 服务创建的会话(IoSession)相关的数据通过 IoSessionDataStructureFactory来提供。
  • 发送消息时有一个写缓冲队列。
  • 服务的闲置状态有三种:读端空闲,写端空闲,双端空闲。
  • 还提供服务的一些统计信息,比如时间,数据量等。
  IoProcessor :An internal interface to represent an 'I/O processor' that performs actual I/O operations for IoSessions. It abstracts existing reactor frameworks such as Java NIO once again to simplify transport implementations.
一个内部接口代表一个I/O处理器,它为 IoSession 执行实际的I/O操作。它抽象现有反应器框架,如 Java NIO 再一次简化传输实现。
   DSC0000.jpg 1、IoAcceptor :服务器端接口,接受客户端访问的请求。
  2、AbstractIoService :设定处理函数、Filter、IoServiceListener,实现了 IoService 所有方法,除了 getTransportMetadata() 。
  3、IoServiceListener :可以用于打印日志,主要有Service启动、停止、空闲等监听方法。
  4、处理函数是一个Executor或者是Executor的包装。
  5、AbstractIoAcceptor完成绑定监听端口。
  6、AbstractPollingIoAcceptor执行具体的监听连接以及监听I/O事件,但真正实现的是NioSocketAcceptor open() 方法。
  7、NioSocketAcceptor用JAVA NIO的方式实现了具体的连接方法ServerSocketChannel,例如open,accept等
DSC0001.jpg
  
DSC0002.jpg
DSC0003.jpg DSC0004.jpg
DSC0005.jpg
  以下代码的流程:



    IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.setHandler(new IoHandlerAdapter());
acceptor.bind(new InetSocketAddress(6969));
  1)NioSocketAcceptor 构造函数:



    public NioSocketAcceptor() {
super(new DefaultSocketSessionConfig(), NioProcessor.class);
((DefaultSocketSessionConfig) getSessionConfig()).init(this);
}
  定义了SessionConfig,并把this传递到SessionConfig当中,指定NioProcessor。
  AbstractPollingIoAcceptor 构造函数:



    protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Class

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-92368-1-1.html 上篇帖子: Apache POI Java读取100万行Excel性能优化:split vs indexOf+subString,谁性能好 下篇帖子: Apache Rewrite 规则详解(转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表