转载请注明出处http://chillwarmoon.iteye.com
多好的文档也不如源码来的直接。如果自己的程序对于某种技术过于依赖,有时候仅看那么几页的文档,总是感觉放心不下。还是看看源码,多多理解内部的实现机制为好。
一 读源码时,首先要弄清楚代码所涉及到的重要模型及其之间的关系,从整体架构方面理解其组成。
1.对于IOService的实现NioSocketConnector和NioSocketAcceptor来说,都持有selector的引用,本身都有一个固定的线程池executor,用来执行Connector或者Acceptor任务。
2.除此之外,IoService还有对Processor池的引用,该池中的元素processor的数量是机器的cpu核数+1。
3.processor池中默认元素为NioProcessor对象,每个元素都有一个selector,而且有一个executor线程池,用来执行Processor任务。
二 分析框架的初始化方式,注意不要陷入技术细节,仍然是整体把握。
4.IoService初始化时,需要通过具体的实现提供的transportMetaData,来判断其中规定的session配置类(例如:DefaultSocketSessionConfig)是否来自接口SessionConfig。
5.IoService初始化时,建立与监听器容器IoServiceListenerSupport的双向关联,注册匿名内部实现serviceActivationListener到监听器容器。
PS:Mina框架比起Tomcat源码来说简单很多,Tomcat启动逻辑就花了很长时间来读。
三 要充分利用eclipse中提供给我们查找源码的方法,例如Ctrl+T,Ctrl+H,Ctrl+.,Alt+Shift+o等等。
四 框架初始化后,根据框架的使用方式,来逐步分析代码。
6.关键是对Session的理解:
持有对IoService,Processor池,SocketChannel,SessionConfig和IoService.IoHandler的引用。
在初始化session时,将config配置到了SocketChannel中。
深入理解:
在每次connect后,都会建立与之对应的session(session与channel是1:1关系),而且每个session都加入了processor中,但是都是持有的对一个IoHandler的引用。
将session加入到processor池:
该processor元素的选取是依次在池中选择的。然后将该processor元素加入到了session的attribute中。
也就是说,不同的session可能加入到池中的一个processor元素,一个processor元素有一个selector和一个Processor线程,该线程可以对processor元素对应的这些session进行处理。
7.Processor线程:
(1)如果有newSession,则将channel注册事件SelectionKey.OP_READ到该processor元素的selector
(2)将getFilterChainBuilder中的链节点加入到该session的链中
(3)fire相应的SessionCreate和SessionOpen的chain节点
(4)如果SelectionKey.OP_READ准备好,则read数据,如果session对应的发送队列有数据,则write数据
如果建立的session都放在了一个processor元素里,则handler只能够被一个线程访问,否则handler可能会被多个线程执行。
分享到:
相关推荐
基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发...
apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...
mina源码
mina-core-2.0.0-RC1-sources.jar
mina-2.0.0-M6.zip源码+例子,学些mina必备哦
apache-mina-2.0.7架包与源码(里面包含架包与源码)。
截止目前最新版mina框架源码和jar包,apache-mina-2.1.3所有jar和源文件.7z
导入到myelipse中可以直接查看源文件。Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用...
导入到myelipse中可以直接查看源文件。Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用...
mina2.0.7版本的源代码,官方发布的稳定版本
mina-core-2.0.4.jar
apache-mina-2.0.4 源码 下载
Mina是比较程序的Java socket框架,附件为mina框架源码
openfire3.10.1源码编译缺少的jar包: jetty-websocket-8.1.17.v20150415 jnsapi mina-core-1.1.7-sources.jar mina-filter-compression-1.1.7-sources.jar mina-filter-ssl-1.1.7-sources.jar mina-filter-ssl.jar ...
关于apache组织的mina通信框架,可替代 java.NIO.Selector 的更好选择, 里面包括 mina 2.07版本的源码,编译好的jar文件,以及一些网络上找来的网摘资料文档 [截至2013年10月止]。 打包文件名:...
Mina2源码分析,学习mina不可多得的文档资料
mina2.0源码svn地址,最新源码下载跟踪
交通部809协议源码(java开发,基于apache-mina框架)。未全部实现功能,仅实现server端主链路,从链路未做,默认链路不加密,可满足常规接入实时车辆GPS定位等功能,需实现更多业务逻辑请自行丰富MsgCallBack类。 ...
NULL 博文链接:https://sziitjiang.iteye.com/blog/1646625
apache-mina-2.0.4 mina框架的源码及jar包