(接:深入阅读Mina源码(3) —— Mina之IOAdapter(一))

4. AbstractPollingIoAcceptor

这个类在org.apache.mina.core.polling,这个包一共有四个类,这个类就可以代表整个包的内容了,细致说一下,之后就不再深入介绍这个包了。从名字可以看出包里面的类主要完成轮询。

AbstractPollingIoAcceptor主要完成了AbstractIoAcceptor定义的实际实现方法,如unbind0、bindInternal、dispose0,另外下方了一些更细致的accept、open、select、colse方法让子类实现,也清晰的可以看出它主要为Socket提供父类的一些实现,同时也有了NIO的影子。

看一下AbstractPollingIoAcceptor的属性字段,可以看到

Java代码
  1. /** A lock used to protect the selector to be waked up before it's created */
  2. private final Semaphore lock = new Semaphore(1);
  3. private final IoProcessor<S> processor;
  4. private final boolean createdProcessor;
  5. private final Queue<AcceptorOperationFuture> registerQueue = new ConcurrentLinkedQueue<AcceptorOperationFuture>();
  6. private final Queue<AcceptorOperationFuture> cancelQueue = new ConcurrentLinkedQueue<AcceptorOperationFuture>();
  7. private final Map<SocketAddress, H> boundHandles = Collections.synchronizedMap(new HashMap<SocketAddress, H>());
  8. private final ServiceOperationFuture disposalFuture = new ServiceOperationFuture();
  9. /** A flag set when the acceptor has been created and initialized */
  10. private volatile boolean selectable;
  11. /** The thread responsible of accepting incoming requests */
  12. private AtomicReference<Acceptor> acceptorRef = new AtomicReference<Acceptor>();
  13. protected boolean reuseAddress = false;
  14. /**
  15. * Define the number of socket that can wait to be accepted. Default
  16. * to 50 (as in the SocketServer default).
  17. */
  18. protected int backlog = 50;

/** A lock used to protect the selector to be waked up before it's created */private final Semaphore lock = new Semaphore(1);private final IoProcessor<S> processor;private final boolean createdProcessor;private final Queue<AcceptorOperationFuture> registerQueue = new ConcurrentLinkedQueue<AcceptorOperationFuture>();private final Queue<AcceptorOperationFuture> cancelQueue = new ConcurrentLinkedQueue<AcceptorOperationFuture>();private final Map<SocketAddress, H> boundHandles = Collections.synchronizedMap(new HashMap<SocketAddress, H>());private final ServiceOperationFuture disposalFuture = new ServiceOperationFuture();/** A flag set when the acceptor has been created and initialized */private volatile boolean selectable;/** The thread responsible of accepting incoming requests */private AtomicReference<Acceptor> acceptorRef = new AtomicReference<Acceptor>();protected boolean reuseAddress = false;/*** Define the number of socket that can wait to be accepted. Default* to 50 (as in the SocketServer default).*/protected int backlog = 50;

这个类讲下去确实有种无从下手的感觉,这里注意一个acceptorRef是处理请求的AtomicReference类型的Acceptor,Acceptor是一个用于接收客户端请求,里面代码比较多,但是我感觉此部分是整个类比较关键的实现部分,需要仔细读一下,但是实在不太好讲,这里可以同样只关注整体,不关注细节,包括processor一些方法的内部完成。我只总结一个流程:

主要的两个方法把父类中的注释写一下,方便理解,看了注释再看代码就比较容易想明白了:

bindInternal:Starts the acceptor, and register the given addresses

unbind0:Implement this method to perform the actual unbind operation.

转载于:https://blog.51cto.com/daheyuan/1135182

深入阅读Mina源码(3) —— Mina之IOAdapter(二)相关推荐

  1. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  2. 逐行阅读redux源码(二)combineReducers

    前情提要 逐行阅读redux源码(一)createStore 认识reducers 在我们开始学习源码之前,我们不妨先来看看何谓reducers: 如图所见,我们可以明白, reducer 是用来对初 ...

  3. C++Primer Plus (第六版)阅读笔记 + 源码分析【目录汇总】

    C++Primer Plus (第六版)阅读笔记 + 源码分析[第一章:预备知识] C++Primer Plus (第六版)阅读笔记 + 源码分析[第二章:开始学习C++] C++Primer Plu ...

  4. webuploader 怎么在react中_另辟蹊径搭建阅读React源码调试环境支持所有React版本细分文件断点调试...

    引言(为什么写这篇文章) 若要高效阅读和理解React源码,搭建调试环境是必不可少的一步.而常规方法:使用react.development.js和react-dom.development.js调试 ...

  5. 阅读react-redux源码(七) - 实现一个react-redux

    阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...

  6. 阅读react-redux源码(六) - selectorFactory处理store更新

    阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...

  7. 阅读react-redux源码(五) - connectAdvanced中store改变的事件转发、ref的处理和pure模式的处理

    阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...

  8. 阅读react-redux源码(四) - connectAdvanced、wrapWithConnect、ConnectFunction和checkForUpdates

    阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...

  9. 阅读react-redux源码(三) - mapStateToPropsFactories、mapDispatchToPropsFactories和mergePropsFactories

    阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...

最新文章

  1. Paddle下的Tensor运算以及简单回归问题
  2. Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)
  3. 测试人员面临的测试挑战和必备技能
  4. 利用SoapHeader验证web service调用的合法性(dwonmoon)
  5. 查看CUDA和cuDNN的版本号
  6. 3.3 Spark概述
  7. ECharts图表tooltip显示时超出canvas图层解决方法
  8. matlab如何打开word文档,matlab操作word
  9. win11安装更新错误0x800f081f怎么解决?
  10. 联想小新Air15-2021安装elementaryOS5.1(基于ubuntu18.04)
  11. android绘制半圆弧线_android canvas使用line画半圆
  12. 洛谷P1251 餐巾计划问题 无汇源最小费用流
  13. ThreeJS FBXLoader 加载3D文件,材质消失,已解决
  14. NOSQL原理,基础用法,NOSQL入门
  15. CH344是一款USB总线的转接芯片
  16. 静态成员与静态成员函数
  17. php 读取excel中的内容到mysql 数据库
  18. 关于IP代理的相关基础知识
  19. 软件开发公司管理手册
  20. Elasticsearch中字段类型(Field Type)详解

热门文章

  1. 飞桨模型保存_史上最全解读 | 飞桨模型库重大升级 主流算法模型全覆盖
  2. js文件中可以写html吗,js代码写在HTML正常,分离成js文件再在HTML中引用不起作用...
  3. java ssdb查询_java连接ssdb数据库
  4. VB 二进制数据读写实例
  5. 炒股的最终下场(搞笑趣图)
  6. 美国重金投资3D芯片项目!MIT+美独资公司攻关,旨在继续领先中国
  7. 英伟达发布全球最大GPU:性能提升10倍,售价250万
  8. 论文列表——text classification
  9. round()四舍五入方法的简单使用
  10. Adobe正式在中国市场推出Creative Cloud创意应用软件