`
daimojingdeyu
  • 浏览: 275215 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

Mina原理草图及注释

    博客分类:
  • Java
阅读更多

今天先画一个草图备忘,明天再注释一下。

 

 

上图是Mina的Server端内部运行图,Client处表示外部的客户端通过Socket建立连接。

图中IoAcceptor对应NioSocketAcceptor类,是用来接受Socket请求的。

 

图中用灰色的齿轮表示,小齿轮表示他一直可以干活,运转不息。黄色的小齿轮则表示一个运行在线程池上的任务,表示它是运转在线程池之上的。

 

1、服务端在创建NioSocketAcceptor实现时,会生成一个线程池,此线程池用来执行一个接受请求的任务,这个任务叫Acceptor(可以在AbstractPollingIoAcceptor类中找到其实现类),Acceptor会开一个Selector,用来监听NIO中的ACCEPT事件。任务初始化时并没有执行,而在调用NioSocketAcceptor实例的bind方法时,则会启动对指定端口的ACCEPT事件的监听。

 

2、SimpleIoProcessorPool是在NioSocketAcceptor实例化时创建的,其上有N+1(N=CPU的个数)个NIOProcessor来处理实际IO的读写事件,每个NIOProcessor都会对应一个Selector,来监听Socket中的读写事件。实际对读写的操作也是在一个SimpleIoProcessorPool实例化好的一个线程池中以任务的形式执行,这个任务叫Processor(可以在AbstractPollingIoProcessor类中找到其实现)。

 

1、2中都有提到Selector,这也就是Mina中处理IO事件引入的双Selector的模型,是对Reactor模式的扩展。

下图展示了Mina中reactor模型:

 

而传统的reactor模型则如下:

 

 

一次请求的过程如下:

Client通过Socket连接服务器,先是由Acceptor接收到请求连接的事件(即ACCEPT事件)。此事件由Acceptor进行处理,会创建一条Socket连接,并将此连接和一个NIOProcessor关联,这个过程通过图中的 连接分配器 进行,连接分配器会均衡的将Socket和不同的NIOProcessor绑定(轮流分配),绑定完成后,会在NIOProcessor上进行读写事件的监听,而读写的实际处理则分配给Processor任务完成。当有读写事件发生时,就会通知到对应的Processor进行数据处理。

 

先写这么多吧,可以结合Mina的代码来看一下上面的流程。个人理解,希望对想对Mina了解的兄弟有点帮助。

  • 大小: 41.4 KB
分享到:
评论
2 楼 yzhw 2012-06-27  
请问同一个session的数据在worker threads 中经过的decode compule encode的过程中,怎么确保处理消息的顺序按着接收到顺序一致,而不会被线程的执行时机扰乱;第二个问题是文中说“每个NIOProcessor都会对应一个Selector”, Selector的个数不是在启动时注册的一个吗?
1 楼 yzhw 2012-06-27  
两个图貌似一样

相关推荐

    Apache Mina通信原理

    Apache Mina通信原理Apache Mina通信原理

    深入理解Mina

    Apache Mina是一个高性能的网络应用程序框架,它简化了网络编程,使得开发者可以更加容易地创建可伸缩的网络应用程序。Mina支持异步I/O操作,适用于需要大量并发连接的应用,比如聊天服务器、邮件服务器、游戏服务器...

    mina自定义编解码器详解

    本文将深入探讨mina编解码器的工作原理,提供一个典型编解码器的示例,并解析其代码。 1. **mina框架基础** - Mina提供了一个高效的、事件驱动的网络应用程序框架,简化了网络编程,尤其是TCP和UDP通信。 - 它...

    mina框架详解

    # Mina框架详解 ## 一、Mina框架概述 Mina框架,全称为Apache Mina Server,是一款基于Java的高效、可扩展性强大的网络通信应用框架。它主要支持TCP/IP与UDP/IP协议栈,同时也提供了序列化服务、虚拟机管道通信等...

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    Apache Mina是一个开源的网络通信应用框架,主要应用于Java平台,它为高性能、高可用性的网络应用程序提供了基础架构。在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理...

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    mina框架源码及jar包

    深入研究Mina的源码可以帮助我们理解其内部工作原理,如事件驱动模型的实现、过滤器链的传递机制以及NIO的封装等。同时,源码中的各种设计模式和最佳实践也值得借鉴。 **应用场景:** Mina广泛应用于需要高效网络...

    MINA_API+MINA_DOC+mina

    MINA (Java IO Network Application Framework) 是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务器。这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和...

    Mina+Socket通信

    在IT行业中,网络通信是软件开发中的重要组成部分,特别是在分布式系统和实时数据交换的应用中。Mina和Socket是两种常见的网络通信框架和技术,它们在...理解这两者的原理和用法,对于提升Java网络编程技能至关重要。

    mina原理[定义].pdf

    Apache MINA (Multipurpose Infrastructure for Network Applications) 是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发网络服务或协议。MINA 提供了一种统一的编程模型,支持多种传输层协议,如...

    mina连接 mina心跳连接 mina断线重连

    Apache Mina是一个开源的网络通信框架,常用于构建高性能、高效率的服务端应用程序,尤其在Java平台上。在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina...

    日常笔记-Mina通信原理

    日常笔记-Mina通信原理

    Socket及Mina的讲解

    Socket编程和Apache Mina框架是Java中用于网络通信的重要工具,尤其在开发分布式...通过理解Socket和Mina的工作原理,开发者可以更好地构建高效、稳定的网络通信系统,尤其是在开发需要实时推送功能的Android应用时。

    Mina基础示例

    Mina基础示例 Mina,全称是Java Mina框架,是一个开源的网络通信应用框架,主要用于构建高性能、高可用性的网络服务器。Mina旨在简化网络编程,它提供了高级抽象,如事件驱动和异步I/O,使得开发者能够专注于业务...

    Java springboot 整合mina 框架,nio通讯基础教程,mina框架基础教程.zip

    总结来说,本教程将引导你从理论到实践,掌握Java NIO的基本原理,理解Mina框架的使用,以及如何在SpringBoot环境中整合Mina实现高效的网络通信。通过这些知识的学习,你将具备开发高并发、高性能网络应用的能力。

    Mina文件及字符串传输

    本话题将深入探讨如何利用Mina进行文件及字符串的传输。 标题中的"Mina文件及字符串传输"指的是使用Apache Mina框架进行数据交互的过程,包括发送和接收字符串请求以及传输文件。这一过程通常涉及到网络编程中的TCP...

    mina用法及用到的包

    博客文章“mina用法及用到的包”可能详细讲述了这些概念,并通过实例展示了如何配置和使用MINA,以及如何根据项目需求选择和利用相关的MINA包。可能还会讨论一些最佳实践,如何优化MINA应用,以及如何解决开发中遇到...

    mina2.0 含11个jar包

    mina-core-2.0.0-M6.jar mina-example-2.0.0-M6.jar mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-...

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

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

Global site tag (gtag.js) - Google Analytics