`

【源码学习】Mina笔记 (一)

阅读更多

        因最近准备了解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和线程池是重点。当中还有好些巧妙的编码细节值得我去深入了解,后面再继续边看边写笔记吧~

 

        发布在 http://auzll.iteye.com

分享到:
评论

相关推荐

    Mina学习笔记

    Apache Mina是一个基于Java的网络通信框架,专为高性能、高可用性和可扩展性而设计。...在深入学习Mina的过程中,理解IoService及其子类的工作原理,以及如何结合IoHandler实现业务逻辑,对于掌握Mina框架至关重要。

    apache mina 学习笔记三(子项目FtpServer)

    在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...

    Mina2.0学习笔记(修订版).

    Apache Mina是一个高性能、事件驱动的网络应用框架,主要用于简化开发服务器端的复杂性,尤其在处理TCP/IP、UDP和SSL/TLS等协议时。它提供了丰富的API和工具,使得开发者能够快速构建网络应用程序,如FTP、SMTP、...

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Mina2.0学习笔记(完整版).doc

    Apache Mina是一个强大的开源框架,专门用于构建高性能、高可扩展性的网络应用程序。Mina2.0是其一个重要的版本,提供了许多改进和新特性,使得开发者能够更轻松地处理网络通信任务,尤其是在Java NIO(Non-blocking...

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

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

    mina学习笔记,记录所有API

    在MINA的学习笔记中,记录的所有API通常会包括以下几个核心部分: 1. **IoSession**: 这是MINA的核心接口,代表了客户端和服务器之间的连接。IoSession提供了读写数据、管理连接状态、获取会话属性等功能。例如,`...

    Apache mina2学习笔记DEMO

    在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...

    apache-mina源码

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

    Mina2.0阅读源码笔记(很值得一看)

    ### Mina2.0阅读源码笔记知识点梳理 #### 一、Mina 概述与官方资源 **Mina** 是 Apache 基金会下的一个开源项目,它为开发者提供了一个高性能且易于使用的网络应用框架。Mina 的设计目标是帮助用户轻松地开发出高...

    MINA源码与例子

    总的来说,Apache MINA是一个强大且灵活的网络框架,它的源码是一个宝贵的教育资源,对于任何想要深入研究Java网络编程的人来说都是宝贵的参考资料。通过学习和理解MINA,你不仅可以提升网络编程技能,还可以从中...

    mina新手教程源码 mina+springboot+idea最简单的案例。

    mina新手案例,mina新手教程源码 mina+springboot最简单的案例。用的IDEA * mina服务端 * 1、添加@Controller注解和 @PostConstruct注解,代表启动springboot项目时也调用该类下的该方法, * 启动springboot项目...

    Mina 1.1.7 示例源码(apache.mina.example)

    在Mina 1.1.7版本中,提供的示例源码是学习和理解Mina框架工作原理及其实现各种网络协议的重要资源。这个压缩包"apache.mina.example"包含了一系列的示例项目,可以帮助开发者快速上手并深入理解Mina。 1. **Mina...

    mina学习笔记

    《mina学习笔记》 Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是TCP和UDP协议的应用。MINA 提供了一种与网络协议无关的API,...

    mina2.0源码svn地址

    通过查看日志,你可以了解每一次提交的详情,这对于理解和学习Mina2.0的开发过程非常有帮助。 #### 五、Mina2.0核心功能概述 - **高性能IO处理**:Mina2.0采用了高效的非阻塞IO模型,能够处理高并发连接请求。 - *...

Global site tag (gtag.js) - Google Analytics