深入阅读Mina源码(3) —— Mina之IOAdapter(二)
(接:深入阅读Mina源码(3) —— Mina之IOAdapter(一))
4. AbstractPollingIoAcceptor
这个类在org.apache.mina.core.polling,这个包一共有四个类,这个类就可以代表整个包的内容了,细致说一下,之后就不再深入介绍这个包了。从名字可以看出包里面的类主要完成轮询。
AbstractPollingIoAcceptor主要完成了AbstractIoAcceptor定义的实际实现方法,如unbind0、bindInternal、dispose0,另外下方了一些更细致的accept、open、select、colse方法让子类实现,也清晰的可以看出它主要为Socket提供父类的一些实现,同时也有了NIO的影子。
看一下AbstractPollingIoAcceptor的属性字段,可以看到
- /** 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;
/** 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(二)相关推荐
- Mina源码阅读笔记(一)-整体解读
2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...
- 逐行阅读redux源码(二)combineReducers
前情提要 逐行阅读redux源码(一)createStore 认识reducers 在我们开始学习源码之前,我们不妨先来看看何谓reducers: 如图所见,我们可以明白, reducer 是用来对初 ...
- C++Primer Plus (第六版)阅读笔记 + 源码分析【目录汇总】
C++Primer Plus (第六版)阅读笔记 + 源码分析[第一章:预备知识] C++Primer Plus (第六版)阅读笔记 + 源码分析[第二章:开始学习C++] C++Primer Plu ...
- webuploader 怎么在react中_另辟蹊径搭建阅读React源码调试环境支持所有React版本细分文件断点调试...
引言(为什么写这篇文章) 若要高效阅读和理解React源码,搭建调试环境是必不可少的一步.而常规方法:使用react.development.js和react-dom.development.js调试 ...
- 阅读react-redux源码(七) - 实现一个react-redux
阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...
- 阅读react-redux源码(六) - selectorFactory处理store更新
阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...
- 阅读react-redux源码(五) - connectAdvanced中store改变的事件转发、ref的处理和pure模式的处理
阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...
- 阅读react-redux源码(四) - connectAdvanced、wrapWithConnect、ConnectFunction和checkForUpdates
阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...
- 阅读react-redux源码(三) - mapStateToPropsFactories、mapDispatchToPropsFactories和mergePropsFactories
阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...
最新文章
- Paddle下的Tensor运算以及简单回归问题
- Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)
- 测试人员面临的测试挑战和必备技能
- 利用SoapHeader验证web service调用的合法性(dwonmoon)
- 查看CUDA和cuDNN的版本号
- 3.3 Spark概述
- ECharts图表tooltip显示时超出canvas图层解决方法
- matlab如何打开word文档,matlab操作word
- win11安装更新错误0x800f081f怎么解决?
- 联想小新Air15-2021安装elementaryOS5.1(基于ubuntu18.04)
- android绘制半圆弧线_android canvas使用line画半圆
- 洛谷P1251 餐巾计划问题 无汇源最小费用流
- ThreeJS FBXLoader 加载3D文件,材质消失,已解决
- NOSQL原理,基础用法,NOSQL入门
- CH344是一款USB总线的转接芯片
- 静态成员与静态成员函数
- php 读取excel中的内容到mysql 数据库
- 关于IP代理的相关基础知识
- 软件开发公司管理手册
- Elasticsearch中字段类型(Field Type)详解
热门文章
- 飞桨模型保存_史上最全解读 | 飞桨模型库重大升级 主流算法模型全覆盖
- js文件中可以写html吗,js代码写在HTML正常,分离成js文件再在HTML中引用不起作用...
- java ssdb查询_java连接ssdb数据库
- VB 二进制数据读写实例
- 炒股的最终下场(搞笑趣图)
- 美国重金投资3D芯片项目!MIT+美独资公司攻关,旨在继续领先中国
- 英伟达发布全球最大GPU:性能提升10倍,售价250万
- 论文列表——text classification
- round()四舍五入方法的简单使用
- Adobe正式在中国市场推出Creative Cloud创意应用软件