今天先画一个草图备忘,明天再注释一下。
上图是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
分享到:
相关推荐
Apache Mina通信原理Apache Mina通信原理
Apache Mina是一个高性能的网络应用程序框架,它简化了网络编程,使得开发者可以更加容易地创建可伸缩的网络应用程序。Mina支持异步I/O操作,适用于需要大量并发连接的应用,比如聊天服务器、邮件服务器、游戏服务器...
本文将深入探讨mina编解码器的工作原理,提供一个典型编解码器的示例,并解析其代码。 1. **mina框架基础** - Mina提供了一个高效的、事件驱动的网络应用程序框架,简化了网络编程,尤其是TCP和UDP通信。 - 它...
# Mina框架详解 ## 一、Mina框架概述 Mina框架,全称为Apache Mina Server,是一款基于Java的高效、可扩展性强大的网络通信应用框架。它主要支持TCP/IP与UDP/IP协议栈,同时也提供了序列化服务、虚拟机管道通信等...
Apache Mina是一个开源的网络通信应用框架,主要应用于Java平台,它为高性能、高可用性的网络应用程序提供了基础架构。在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理...
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...
深入研究Mina的源码可以帮助我们理解其内部工作原理,如事件驱动模型的实现、过滤器链的传递机制以及NIO的封装等。同时,源码中的各种设计模式和最佳实践也值得借鉴。 **应用场景:** Mina广泛应用于需要高效网络...
MINA (Java IO Network Application Framework) 是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务器。这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和...
在IT行业中,网络通信是软件开发中的重要组成部分,特别是在分布式系统和实时数据交换的应用中。Mina和Socket是两种常见的网络通信框架和技术,它们在...理解这两者的原理和用法,对于提升Java网络编程技能至关重要。
Apache MINA (Multipurpose Infrastructure for Network Applications) 是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发网络服务或协议。MINA 提供了一种统一的编程模型,支持多种传输层协议,如...
Apache Mina是一个开源的网络通信框架,常用于构建高性能、高效率的服务端应用程序,尤其在Java平台上。在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina...
日常笔记-Mina通信原理
Socket编程和Apache Mina框架是Java中用于网络通信的重要工具,尤其在开发分布式...通过理解Socket和Mina的工作原理,开发者可以更好地构建高效、稳定的网络通信系统,尤其是在开发需要实时推送功能的Android应用时。
Mina基础示例 Mina,全称是Java Mina框架,是一个开源的网络通信应用框架,主要用于构建高性能、高可用性的网络服务器。Mina旨在简化网络编程,它提供了高级抽象,如事件驱动和异步I/O,使得开发者能够专注于业务...
总结来说,本教程将引导你从理论到实践,掌握Java NIO的基本原理,理解Mina框架的使用,以及如何在SpringBoot环境中整合Mina实现高效的网络通信。通过这些知识的学习,你将具备开发高并发、高性能网络应用的能力。
本话题将深入探讨如何利用Mina进行文件及字符串的传输。 标题中的"Mina文件及字符串传输"指的是使用Apache Mina框架进行数据交互的过程,包括发送和接收字符串请求以及传输文件。这一过程通常涉及到网络编程中的TCP...
博客文章“mina用法及用到的包”可能详细讲述了这些概念,并通过实例展示了如何配置和使用MINA,以及如何根据项目需求选择和利用相关的MINA包。可能还会讨论一些最佳实践,如何优化MINA应用,以及如何解决开发中遇到...
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新手教程源码 mina+springboot最简单的案例。用的IDEA * mina服务端 * 1、添加@Controller注解和 @PostConstruct注解,代表启动springboot项目时也调用该类下的该方法, * 启动springboot项目...