`
firecloudhawk
  • 浏览: 17528 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

Mina 代码分析2 (主框架代码)

阅读更多
Mina暴露给开发者的接口主要是IoAcceptor(服务器端)或者IoConnector(客户端)。Mina内部具体是怎么实现侦听,处理连接的呢?我们先来介绍一下Mina的方法哲学或者说术语吧。

IoSession 

    IoSession:   IoSession是一个客户连接的抽象,整个通讯框架可以说,都是围绕着IoSession工作的。
    IoAcceptor:  初始化服务器,用的就是它
    IoProcessor: 负责处理IoSession,包括创建,移除,读写事件的处理
    IoFilter:    过滤消息或者说消息处理(通讯层的)
    IoHandler:   消息处理(应用逻辑层的)


通讯层的核心类,事实上是IoAcceptor,IoProcessor,IoSession。在这里我们只分析IoAcceptor模式,也就是服务器端的代码。客户端的代码与此类似,大家可以自己研究。

首先,调用IoAcceptor.bind()方法时,服务器已经初始化完毕,这时服务器就在指定的端口上开始侦听客户端发来的连接请求。

当IoAcceptor侦听到客户端请求时,它就会把这个请求交给IoProcessor进行处理。然后IoAcceptor回去继续侦听。显然,IoAcceptor的工作流程就是 侦听 --> 传递请求 --> 继续侦听。

IoProcessor得任务则是处理这些连接的IO事件。显然IoProcessor不可能和IoAcceptor在同一个线程里运行。他们两个分工不同,可以并发执行。Mina内部事实上维护了一个IoProcessor对象池,对象池的默认大小是CPU个数+1.也就是说,如果你的机器是4核的,可能就有5个IoProcessor(可以理解为线程)同时工作。

看看下面的示意图吧,一图胜千言:






  • 大小: 20.6 KB
1
0
分享到:
评论

相关推荐

    Apache mina源代码框架解析

    在这个文档中,我们将简要分析Mina 2.0框架的源代码,并通过一个简单的时钟服务器示例来了解其工作原理。 首先,我们来看`MinaTimeServer`类。这个类是Mina服务器的主入口点,它创建了一个`NioSocketAcceptor`实例...

    mina框架使用总结

    MINA (Multipurpose Infrastructure for Network Applications) 是一个基于 Java 的网络应用框架,主要利用了 Java NIO (Non-blocking I/O) 技术。NIO 相比于传统的 BIo (Blocking I/O),提供了更高效的数据传输能力...

    MINA2与Netty4比较分析

    接下来将根据标题和描述的要求详细分析Mina2与Netty4的区别,重点从它们的线程模型、Buffer使用以及Netty4中集成的序列化工具ProtoBuf等方面进行比较。 首先,Mina2和Netty4都是异步事件驱动的网络应用框架。Netty4...

    mina高性能Java网络框架 v2.2.1.zip

    "apache-mina-2.2.1"这个文件名可能是MINA框架的主目录,包含了库文件、示例代码、文档和其他相关资源。 在Apache MINA框架中,主要涉及的知识点包括: 1. **异步事件驱动模型**:MINA使用非阻塞I/O模型,通过事件...

    ftpserver mina框架,适合学习

    6. **源码阅读**:通过阅读Apache Mina FTPServer的源码,可以深入理解FTP协议的实现细节,以及Mina框架如何处理网络通信。 7. **实战项目**:创建一个简单的FTP服务器并进行测试,实践是检验理论的最好方式。你...

    mina高性能Java网络框架.zip

    MINA项目提供了许多示例代码,涵盖了从基础的Echo服务到复杂的FTP服务器的实现,有助于开发者快速理解和上手。 8. **社区支持** MINA有着活跃的开发者社区,用户可以在官方论坛和邮件列表中获取帮助,共享经验和...

    freemina,一个免费的mina兼容框架,可在浏览器或webview中运行。Mina是微信应用的框架,微信应用是微信应用的框架。21488页.zip

    Freemina是一个开源项目,它的设计目标是提供一个与Mina框架兼容的免费实现,使得开发者可以在浏览器或Webview环境中运行基于Mina的应用程序。Mina框架本身是Apache软件基金会的一个项目,它是一个网络通信应用框架...

    apache-mina-2.0.16

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发服务器端和客户端的网络应用。标题"apache-mina-2.0.16"表明我们讨论的是...

    Mina实现长连接和短连接实例

    4. `src`:源代码目录,通常包含`main/java`和`test/java`子目录,分别存放主代码和测试代码。 5. `lib`:第三方库文件夹,可能包含Mina库和其他必要的依赖。 在Mina项目中,我们还需要了解如何配置`...

    mina-master_mina_

    标题中的"mina-master_mina_"可能指的是一个MINA项目或示例的主分支,可能包含了服务器端的核心代码和配置。描述中提到的"mina 服务端的简单应用,直接部署可以使用"表明这个压缩包包含了一个能够快速运行的MINA...

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

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

    MINA 服务端和客户端demo

    MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,提供了一套高度可扩展和高性能的网络应用程序框架,用于构建服务器和客户端应用。它简化了网络编程,特别是TCP/IP...

    mina,XUtil,sliding多个框架demo

    - **Mina2Demo**:这个可能是Mina框架的一个简单示例,演示了如何建立一个基本的Mina服务器并进行通信。 - **SlidingMenu**:可能是SlidingMenu库的源码或者示例应用,开发者可以通过此了解其内部实现和如何自定义...

    JAVA上百实例源码以及开源项目源代码

    Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...

    练练手,用mina2.0搭建一个nio客户端

    标题中的“练练手,用mina2.0搭建一个nio客户端”表明了本文将探讨如何使用Mina 2.0框架构建一个基于非阻塞I/O(NIO)的客户端应用。Mina是一个开源的Java框架,常用于开发高性能、高并发的网络通信应用,如TCP/IP和...

    初学调用webservice的demo,适合初学者入门,资源包括axis2的库文件,以及org.apache.mina等库文件

    Axis2是Apache软件基金会开发的一个Web服务框架,它使得开发和部署Web服务变得简单。 【描述】进一步强调了这个资源包适用于初学者,包含Axis2的库文件,以及`org.apache.mina`相关的库文件。Apache Axis2是 Axis ...

    Introduction to MINA

    - **可维护性和可重用性**:通过将网络代码(即MINA)、协议编解码以及业务逻辑分离,MINA提高了代码的可维护性和可重用性。 ##### 性能 - **AMQP测试案例**:根据JPMorgan Chase & Co提供的数据,在使用4个双核...

    mina+springmvc demo

    标题"Mina+SpringMVC Demo"揭示了一个集成项目,它结合了Apache Mina与Spring MVC框架,用于构建网络通信和Web应用。Apache Mina是一个高度可扩展的网络通信框架,适用于TCP/IP和UDP/IP协议,而Spring MVC是Spring...

    基于mina的一个Memcached客户端首发

    在描述中提到了一个博客链接,虽然具体内容未提供,但通常博主会详细介绍如何使用MINA框架创建Memcached客户端,包括设计思路、关键代码示例以及可能遇到的问题和解决方案。博客可能会涵盖以下知识点: 1. **Apache...

Global site tag (gtag.js) - Google Analytics