`
chillwarmoon
  • 浏览: 155320 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

还是源码来的直接---读mina源码

阅读更多
转载请注明出处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可能会被多个线程执行。
分享到:
评论
12 楼 yzpbright 2014-11-20  
博主,我想问下怎么把mina源码部署到eclipse或myeclipse里啊?
11 楼 ChinaEstone 2009-08-05  
Aga 写道
fjlyxx 写道
嗯 , MINA挺好 不过就是因为HANDLER的关系导致MINA和业务剥离的不够明显,建议IO就是IO,IO操作完了(里程碑式操作)直接把IO数据推到业务队列里面 让业务和IO分离.

在mina中你可以自定义filter,在filter中执行byte code<-->java object之间的转化,而仅仅在handler中实现相关的业务逻辑,所以我觉得mina把io工作和业务剥离的已经很不错了。


楼上说的不错,IoFilter应该就是实现IO操作的,IoHandler是实现业务逻辑的,这点在Mina的官网上有了详细的讲述。
10 楼 mathgl 2009-05-21  
不知道和netty 3比较如何.
9 楼 Aga 2009-05-21  
fjlyxx 写道
嗯 , MINA挺好 不过就是因为HANDLER的关系导致MINA和业务剥离的不够明显,建议IO就是IO,IO操作完了(里程碑式操作)直接把IO数据推到业务队列里面 让业务和IO分离.

在mina中你可以自定义filter,在filter中执行byte code<-->java object之间的转化,而仅仅在handler中实现相关的业务逻辑,所以我觉得mina把io工作和业务剥离的已经很不错了。
8 楼 Aga 2009-05-21  
sxjkk 写道
似乎任何底层上的通信都是SOCKET吧

socket指的是有连接的可靠通讯,是一个tcp协议的实现
与之相对应的是udp协议,是没有连接的数据报文通讯,在java当中对应的是DatagramSocket,虽然都叫socket,但是两个东西完全不同。
7 楼 fjlyxx 2009-04-02  
嗯 , MINA挺好 不过就是因为HANDLER的关系导致MINA和业务剥离的不够明显,建议IO就是IO,IO操作完了(里程碑式操作)直接把IO数据推到业务队列里面 让业务和IO分离.
6 楼 chillwarmoon 2009-03-27  
lqql 写道

MINA的并发性能好像比较差!

昨天分析了一下,可能和handler的使用情况有关。
5 楼 lqql 2009-03-27  
MINA的并发性能好像比较差!
4 楼 chillwarmoon 2009-03-26  
zyihang 写道

用mina来实现TCP或者UDP通讯底层好像还是Socket通讯。

是socket通信,mina利用java的nio来实现io的多路复用。
3 楼 sxjkk 2009-03-20  
似乎任何底层上的通信都是SOCKET吧
2 楼 zyihang 2009-03-20  
用mina来实现TCP或者UDP通讯底层好像还是Socket通讯。
1 楼 unsid 2009-02-27  
关于类加载的设计有待继续学习

相关推荐

    基于java的开发源码-mina高性能Java网络框架.zip

    基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发源码-mina高性能Java网络框架.zip 基于java的开发...

    apache-mina-2.0.16-jar包-代码.zip

    2. **统一的API**:无论是TCP、UDP还是其他协议,Mina都提供了一致的API,简化了开发工作。 3. **过滤器架构**:通过过滤器链,开发者可以轻松添加中间件组件,实现数据编码、解码、安全、压缩等功能。 4. **丰富的...

    apache-mina源码

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为开发高性能和高可用性的网络...对于想要从事网络编程或系统架构设计的开发者来说,研究MINA源码无疑是一个极好的学习机会。

    apache-mina-2.0.4架包及源码各pdf学习教程

    apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...

    apache-mina-2.0.7-src.zip

    从压缩包子文件的文件名称列表"apache-mina-2.0.7"来看,解压后应该会得到一个包含MINA框架源码目录结构的文件夹,里面可能包括以下组成部分: 1. **核心库**:包含MINA的核心组件,如Buffer、Filter、Session、...

    mina-core-2.0.0-RC1-sources.jar

    mina-core-2.0.0-RC1-sources.jar

    apache-mina-2.0.7架包与源码

    源码包("apache-mina-2.0.7-src.zip")对于开发者来说非常有价值,因为它允许他们深入理解MINA的工作原理,进行自定义修改,以及调试和优化代码。通过查看源码,开发者可以学习MINA如何处理网络I/O事件,如何实现非...

    mina源码+例子mina-2.0.0-M6.zip

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的...通过深入研究源码和实践示例,你将能熟练掌握MINA框架,并利用它来构建高效、可靠的网络应用。

    Cindy 3.0b1 的源码--- Mina的兄弟

    导入到myelipse中可以直接查看源文件。Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用...

    Netty 3.0.2.GA 的源码--- Mina的兄弟

    导入到myelipse中可以直接查看源文件。Netty、Mina、Cindy都是不错的NIO开源框架,后两者都是在Netty的基础上演化出来的。所以要学习好Java的异步通信框架,这三个都是不可多得的好材料。 本资源仅供学习和参考使用...

    apache-mina-2.1.3所有jar和源文件.7z

    使用这个压缩包,开发者可以直接将MINA库引入到项目中,利用其强大的功能进行网络服务开发。同时,源代码的提供使得开发者能够根据实际需求进行二次开发,对MINA进行定制以适应更复杂的应用场景。 总结起来,Apache...

    MINA-2.0.0-M3

    在实际开发中,MINA源码的学习可以帮助我们更好地理解和优化网络应用的性能,例如,通过调整过滤器链的顺序和逻辑,可以实现更高效的通信流程。同时,对于网络编程和Java NIO的理解也会得到提升。 标签中的"Socket...

    Mina 框架源码解析-构建简单通信程序

    本篇文章将深入解析Mina框架的源码,通过构建一个简单的心跳通信程序,来理解其核心机制。 首先,我们来看一下心跳通信的基本概念。在分布式系统中,心跳机制是保持连接状态和检测网络故障的重要手段。心跳包是周期...

    mina-core-2.0.0-RC1

    2. **mina-core-2.0.0-RC1-sources.jar**:这个文件包含了mina-core的源代码,对于开发者来说,它是理解和定制MINA行为的关键资源。通过阅读源码,开发者可以更深入地了解MINA的工作原理,调试问题,甚至为MINA贡献...

    apache-mina-2.0.4.rar_apache mina_mina

    对于希望提高网络应用性能或熟悉Java NIO编程的开发者来说,Apache Mina 2.0.4的源码分析是一次宝贵的学习机会。你可以通过阅读源码学习到如何有效地处理高并发场景,如何设计和实现高效的网络协议,以及如何利用...

    MINA源码与例子

    在MINA源码中,我们可以看到以下关键组件: 1. **Session**:这是MINA中的核心概念,代表了网络连接。Session负责管理连接状态,并提供读写数据的方法。 2. **Filter Chain**:MINA采用过滤器链模式来处理网络事件...

    mina-core-2.0.4.jar

    mina-core-2.0.4.jar

    mina2.0源码svn地址

    总之,“mina2.0源码svn地址”为开发者提供了一个直接获取Mina2.0源代码的有效途径。通过SVN工具,不仅可以方便地获取最新版本的代码,还能深入了解项目的历史变更和发展轨迹。对于希望深入研究Mina2.0内部实现机制...

    MINA 2.0.9源码

    MINA 2.0.9是该框架的一个版本,其源码提供了深入理解MINA工作原理的机会,有助于开发者进行定制化开发或优化。 MINA的核心特性在于它的异步IO模型,它采用了NIO(Non-blocking I/O)技术,使得应用程序在处理大量...

    交通部809协议源码(java开发,基于apache-mina框架)

    交通部809协议源码(java开发,基于apache-mina框架)。未全部实现功能,仅实现server端主链路,从链路未做,默认链路不加密,可满足常规接入实时车辆GPS定位等功能,需实现更多业务逻辑请自行丰富MsgCallBack类。 ...

Global site tag (gtag.js) - Google Analytics