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

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
分享到:
评论

相关推荐

    mina框架使用总结

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

    ftpserver mina框架,适合学习

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

    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 ...

    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...

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

    这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet...

    从Github检出Mina(maven)项目出现问题解决过程

    首先,Mina是一个高性能、轻量级的网络通信框架,常用于构建网络应用,如服务器和客户端。它提供了基于事件驱动、异步API,使得开发人员可以更高效地处理网络通信任务。而Maven是Apache的一款项目管理和集成工具,...

    MINA服务端Demo

    MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,主要提供了一个高度可扩展和高性能的网络应用程序框架,用于简化开发TCP和UDP服务的过程。MINA旨在为Java开发者...

    原创nio socket mina+javascript+flash实现commet长连接网页聊天室

    综合以上分析,这个项目展示了如何在没有现代Web实时通信技术(如WebSocket)的环境下,利用Java NIO、Mina框架构建高并发的服务器,以及如何借助Flash和JavaScript实现跨浏览器的长连接,以达到实时聊天室的效果。...

    基于mina的开源文件传输软件

    2. **事件驱动**:Mina采用事件驱动模型,当网络事件发生时,如数据接收或发送完成,会触发相应的回调方法,提高了代码的可读性和可维护性。 3. **协议无关性**:Mina设计为协议无关,因此可以轻松地实现不同协议的...

Global site tag (gtag.js) - Google Analytics