因最近准备了解Apache Vysper的源码,而vysper又依赖于Mina,所以又想重新看看mina。之所以说是重新看,是因为一两年前也有看过,不过也没做啥笔记,好些细节都忘记了,这次就边看边做笔记好了。
Apache Vysper是Mina项目下的子项目,实现了大部分的XMPP协议(当前最新版本是0.7),而Mina是一个使用Java Nio来实现的高性能异步网络编程组件,自身基于事件驱动模型来开发。
在Mina里面,最主要的就是NioSocketAcceptor,NioSocketConnector和NioProcessor,把握这几个类的实现就能从整体上把握mina的结构了。
1) NioSocketAcceptor是用来编写服务器端程序的,它会间接创建一个实现了Runnable接口的Acceptor内部类,也会间接创建包含NioProcessor实例的处理池SimpleIoProcessorPool,接着由线程池调度Acceptor,等待客户端的连接到来。当有客户端连接过来了,Acceptor开始处理,从SimpleIoProcessorPool中获取一个NioProcessor,开始和客户端进行真正的数据通讯。
2) NioSocketConnector的原理和NioSocketAcceptor类似,但它是用来编写客户端程序的,它没有Acceptor,取而代之的是一个Connector内部类,当成功连接到服务器时,也会从处理池SimpleIoProcessorPool中分配一个NioProcessor来处理具体的数据通讯。
3) 数据通讯方面,Mina有一个叫做filter chain的东西(主要看看DefaultIoFilterChain),读数据或写数据都会经过chain,以完成数据的编码和解码。
a) 读取数据时,会从HeadFilter开始,经历中间的filter chain之后到达TailFilter,然后触发messageReceived方法来直接调用用户自定义的IoHandler。
b) 写数据时会反过来,从TailFilter开始,经历中间的filter chain完成数据编码到达HeadFilter,把数据写到缓冲队列中,接着尝试唤醒selector,触发NioProcessor负责具体的写数据(Write the pending requests)。
大体的框架结构就是这样,nio和线程池是重点。当中还有好些巧妙的编码细节值得我去深入了解,后面再继续边看边写笔记吧~
相关推荐
Mina学习笔记。作者:李少华
mina2学习笔记
真的是学习MIna很好的资源,找了好久才找到的,看了很多相关的知识书籍,这本书真的不错。
mina学习笔记,记录所有API,mina学习笔记,记录所有API
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
这是一个关于mina框架非常全的自学文档
基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发...
mina源码
这个是我学的apache mina2.0学习笔记的实例
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议...
Mina2.0学习笔记(修订版) 文档中附带大量实现的源码
Mina2源码分析,学习mina不可多得的文档资料
NULL 博文链接:https://tangmingjie2009.iteye.com/blog/2036903
mina学习资料 包含Mina学习笔记 Mina2.0快速入门与源码剖析 Apache_Mina_Server_2.0中文参考手册V1.0 我本人推荐新手可以看Mina学习笔记里面有实例!很适合新手
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...
mina源码阅读笔记,适合需要使用mina的人阅读,更多的信息可以看作者的博客http://my.oschina.net/ielts0909/blog
mina 第一原始版本的例子源码,可以供学习使用
丰富的MINA实例介绍,java NIO 学习,mina快速入门宝典
MINA通宵架包源码,MINA通宵架包源码,MINA通宵架包源码