Mina源码阅读笔记(一)-整体解读
2019独角兽企业重金招聘Python工程师标准>>>
今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者类的方法。我倒是想从mina源码的结构和功能上对这个框架进行剖析。源码的阅读一般有如下几种方法:第一,根据问题读源码,这种方法可能用的最多,哪里有问题了,然后F3一步步点进去;第二种,专门为了读源码而读,从整体到局部,总用法到设计。第三种,可是根据软件的设计特点,根据特点逐一解读。这几篇文章主要将根据第三种方法进行阅读,因为mina的各个模块很有条理,而且我关注的重点也主要分布在几个核心点上,对我来说,这样的读法更合理。
Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract ·event-driven · asynchronous API over various transports such as TCP/IP and UDP/IP via Java NIO.
写过NIO的人都知道,NIO里主要有那么几部分,用于内容切换的各类缓冲区,当然我们印象最深的就是ByteBuffer;用于IO服务直接连通的通道Channel,这里有用于文件和网络的通道;有用于实现NIO socket Reactor模式的选择器selector;和处理字符集的Charset。而mina就是将这几部分有机的整合,实现了这个高性能的框架。
在看代码之前,我们要先了解mina到底为我们提供了什么,我按照源码的结构整理如下:
用于缓冲区的IoBuffer |
org.apache.mina.core.buffer |
用于提供连接的service |
org.apache.mina.core.service org.apache.mina.transport.* |
用于提供两端状态的session |
org.apache.mina.core.session |
用于拦截所有IO事件和请求的filter chain和各类拦截器(在IoService和IoHandler之间) |
org.apache.mina.core.filterchain org.apache.mina.filter.* |
用于处理IO事件的handler |
org.apache.mina.handler.* |
用于实现异步IO操作的 future |
org.apache.mina.core.future |
用于实现IO轮询的的polling |
org.apache.mina.core.polling |
用于实现代理的proxy |
org.apache.mina.proxy.* |
至此,mina-core-2.0.7中的代码大致就可以分成上述这几类了。而我们对源码的浏览也会按照这几部分逐一进行。
在开始阅读代码之前,我们再熟悉一下mina在通信时会做的事情,这样的事情不是徒劳的,对过程理解的越透彻对代码的分析也会越深刻,我们不但要学习代码里的设计模式和组织结构,更要去理解里面的实现逻辑。没装UML的工具,就拿PPT画了:
这里的变现没有像之前mina通信那篇文章里一样,描述具体的编码和解码过程,这个图主要描述了两端对接的过程,是一个宏观上的通信过程:
1、 图中的一对应的是service执行的过程,首先肯定是要建立连接,对于服务端是Accept,客户端则是connect。
2、 图中的二,指的是在每次连接之后就会产生一个记录通信信息的session,我们看mina官方的描述:every time a client connects to the server, a new session is created, and will be kept in memory until the client is disconnected.
3、 图中的三指的是过滤器链,这里主要实现我们对通信的要求,比如编码、解码、日志等。
4、 图中的四是Handler,是filter chain的最后一步,通过adapter接入了session的整个生命周期。
服务器端反之亦然。
上面的图示mina官方给出的,表述的同一个意思。在IoHandler这里mina是这么给出描述的: The interface is hub of all activities done at the end of the Filter Chain.
分析清楚了整个代码的体系,后面开始,我们就可以针对每一个部分详细分析了。我们会从最基本的缓冲区开始,这部分相对比较独立,之后会根据连接过程进行一步步分析。后面的一篇,我会从IoBuffer开始写起。
转载于:https://my.oschina.net/ielts0909/blog/90355
Mina源码阅读笔记(一)-整体解读相关推荐
- 【Flink】Flink 源码阅读笔记(15)- Flink SQL 整体执行框架
1.概述 转载:Flink 源码阅读笔记(15)- Flink SQL 整体执行框架 在数据处理领域,无论是实时数据处理还是离线数据处理,使用 SQL 简化开发将会是未来的整体发展趋势.尽管 SQL ...
- 【Flink】Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型
1.概述 转载:Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型 相似文章:[Flink]Flink 基于 MailBox 实现的 StreamTask 线程模型 Fl ...
- HashMap源码阅读笔记
HashMap是Java编程中常用的集合框架之一. 利用idea得到的类的继承关系图可以发现,HashMap继承了抽象类AbstractMap,并实现了Map接口(对于Serializable和Clo ...
- Transformers包tokenizer.encode()方法源码阅读笔记
Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode
- 源码阅读笔记 BiLSTM+CRF做NER任务 流程图
源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...
- 代码分析:NASM源码阅读笔记
NASM源码阅读笔记 NASM(Netwide Assembler)的使用文档和代码间的注释相当齐全,这给阅读源码 提供了很大的方便.按作者的说法,这是一个模块化的,可重用的x86汇编器, 而且能够被 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http:// ...
- Yii源码阅读笔记 - 日志组件
2015-03-09 一 By youngsterxyf 使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category); Yii: ...
- AQS源码阅读笔记(一)
AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node {//表示当前节点以共享模式等待锁static final Node SHA ...
最新文章
- 工作经验总结201606
- 7分钟了解科大讯飞开发者节:AI红利期来临,全新1024计划发布(未完待续)
- 遇到虚拟系统内存问题怎么办?Hypervisor帮你除bug
- 微服务架构在云端的应用
- href=#与javascript:void(0)的区别
- Docker 容器的运行(八)
- Apple individual program 加入之后的玩法 官方资源
- Linux 如何将eth1网卡修改为eth0
- 微信小程序版本自动更新弹窗提示
- 300字简单区分线程问题
- 安卓自定义列表dialog
- QML Text 文字元素
- Ubuntu下安装的qq的下载文件地址
- NRD Studio在线导入Excel模板文件,自动生成人物关系图
- 四、软考·系统架构师——软件工程基础
- Word操作之图表目录自动生成
- 吃饭的时候吃饭,睡觉的时候睡觉。 (转)
- Python用户管理系统,宠物管理系统
- 巴别时代php面试题,巴别时代遇到的函数
- Django 入门教程