`

Mina架构

 
阅读更多

总体框架

之前的一个项目用到了MINA,最近想再系统的整理一下

基于MINA框架的应用程序架构应该是这样的:

 


 

 

底层是基于JAVA的NIO 1.0(JDK 1.6,IO复用模型)实现的 ,JDK 1.7中实现了AIO

其核心部分架构是这样的:



 

 

IoService

最底层的是IOService,负责具体的IO相关工作。这一层的典型代表有IOSocketAcceptor和IOSocketChannel,分别对应TCP协议下的服务端和客户端的IOService。IOService的意义在于隐藏底层IO的细节,对上提供统一的基于事件的异步IO接口。每当有数据到达时,IOService会先调用底层IO接口读取数据,封装成IoBuffer,之后以事件的形式通知上层代码,从而将Java NIO的同步IO接口转化成了异步IO。所以从图上看,进来的low-level IO经过IOService层后变成IO Event。

具体的代码可以参考org.apache.mina.core.polling.AbstractPollingIoProcessor的私有内部类Processor。

IoFilterChain

Mina的设计理念之一就是业务代码和数据包处理代码分离,业务代码只专注于业务逻辑,其他的逻辑如:数据包的解析,封装,过滤等则交由IoFilterChain来处理。IoFilterChain可以看成是Mina处理流程的扩展点。这样的划分使得结构更加清晰,代码分工更明确。开发者通过往Chain中添加IoFilter,来增强处理流程,而不会影响后面的业务逻辑代码。

IoHandler

IoHandler是实现业务逻辑的地方,需要有开发者自己来实现这个接口。IoHandler可以看成是Mina处理流程的终点,每个IoService都需要指定一个IoHandler。

IoSession

IoSession是对底层连接的封装,一个IoSession对应于一个底层的IO连接(在Mina中UDP也被抽象成了连接)。通过IoSession,可以获取当前连接相关的上下文信息,以及向远程peer发送数据。发送数据其实也是个异步的过程。发送的操作首先会逆向穿过IoFilterChain,到达IoService。但IoService上并不会直接调用底层IO接口来将数据发送出去,而是会将该次调用封装成一个WriteRequest,放入session的writeRequestQueue中,最后由IoProcessor线程统一调度flush出去。所以发送操作并不会引起上层调用线程的阻塞。

 

Server端应用

Acceptor与Connector线程

在服务器端,bind一个端口后,会创建一个Acceptor线程来负责监听工作。这个线程的工作只有一个,调用Java NIO接口在该端口上select connect事件,获取新建的连接后,封装成IoSession,交由后面的Processor线程处理。在客户端,也有一个类似的,叫Connector的线程与之相对应。这两类线程的数量只有1个,外界无法控制这两类线程的数量。

TCP实现的代码可以参考org.apache.mina.core.polling.AbstractPollingIoAcceptor的内部类Acceptor和org.apache.mina.core.polling.AbstractPollingIoConnector的内部类Connector。

Processor线程

Processor线程主要负责具体的IO读写操作和执行后面的IoFilterChain和IoHandler逻辑。Processor线程的数量N默认是CPU数量+1,可以通过配置参数来控制其数量。前面进来的IoSession会被分配到这N个Processor线程中。默认的SimpleIoProcessorPool的策略是session id绝对值对N取模来分配。

每个Processor线程中都维护着一个selector,对它维护的IoSession集合进行select,然后对select的结果进行遍历,逐一处理。像前面提到的,读取数据,以事件的形式通知后面IoFilterChain;以及对写请求队列的flush操作,都是在这类线程中来做的。

通过将session均分到多个Processor线程里进行处理,可以充分利用多核的处理能力,减轻select操作的压力。默认的Processor的线程数量设置可以满足大部分情况下的需求,但进一步的优化则需要根据实际环境进行测试。




 
 

 

 

 

 

  • 大小: 30.6 KB
  • 大小: 30 KB
  • 大小: 46.5 KB
分享到:
评论

相关推荐

    Mina 架构设计PPT版

    Mina PPT 英文高级 Mina 架构设计PPT版

    基于mina架构的JTT808部标协议网关程序

    该版本基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的 MQ:jms.brokerurl=tcp://127.0.0.1:61616; 终端连接对应的端口:3005, 点击bin/目录下面...

    基于mina架构的JTT808协议网关

    基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的MQ:jms.brokerurl=tcp://127.0.0.1:61616 需要正版可联系QQ:78772895

    基于Mina架构的移动数据Socket Server和android iOS Client端工程代码及文档

    基于Mina架构开发的可配置的Socket Server,后台采用MySql数据库,可以独立app部署或Tomcat Servlet部署,包括Socket Server全部实现代码,后台MySql数据备份文件,Java测试代码,android端测试代码和iOS端测试代码...

    基于mina架构的JTT808部标协议网关

    基于mina架构的JTT808协议演示版本程序,网关采用mina+spring+MQ/redis架构,简单配置application.properties中的 MQ:jms.brokerurl=tcp://127.0.0.1:61616; 终端连接对应的端口:3005, 点击bin/目录下面的bin/...

    3本mina教程和mina帮助文档

    1. **Mina架构**:了解Mina的事件驱动模型和过滤器链,以及如何使用它们来处理网络通信。 2. **NIO原理**:学习非阻塞I/O的工作方式,以及Mina如何利用NIO提高性能和处理大量并发连接。 3. **Mina API**:熟悉Mina...

    Mina in Action preview

    1. **Mina架构**:理解Mina的核心架构,包括I/O多路复用模型(如NIO和Epoll)以及事件驱动的设计,这些设计使得Mina能够处理大量并发连接。 2. **Filter Chain**:Mina的过滤器链机制是其核心特性之一,它允许...

    mina源码+例子mina-2.0.0-M6.zip

    1. **了解MINA架构**:熟悉MINA的IoSession、IoFilter、IoHandler等核心组件及其职责。 2. **分析源码**:通过阅读MINA的源码,了解其内部处理流程,如读写事件的处理、过滤器链的工作方式等。 3. **编写简单的应用*...

    MINA—TCP案例

    1. **MINA架构** MINA采用非阻塞I/O模型,通过NIO(Non-blocking I/O)库实现。这种模式允许一个线程同时处理多个连接,显著提高了服务器的并发性能。MINA的核心组件包括Acceptor(用于接收新连接)、Session(表示...

    Mina Socket 源代码

    1. **Mina 架构** Mina 使用事件驱动和异步处理模型,使得它能够高效地处理大量并发连接。它的架构由三个主要组件组成:Filter、Session 和 ProtocolHandler。 2. **Filter(过滤器)** 过滤器是 Mina 的核心概念...

    apache-mina-2.0.7 含官方教程

    2. **MINA架构**:介绍MINA的事件驱动模型,如何通过事件触发器(如IoHandler)处理网络事件。 3. **项目配置**:如何设置MINA的项目结构,包括POM.xml文件的配置,以及依赖管理。 4. **编写协议处理器**:如何使用...

    Apache Mina 入门Demo

    1. **Mina架构**:Apache Mina的核心设计基于事件驱动和非阻塞I/O模型,这种模型特别适合处理大量并发连接。它将网络通信层抽象为一组服务,如TCP/IP协议栈,让你专注于业务逻辑而不是底层细节。 2. **IoSession...

    mina中文开发手册

    #### 二、Mina架构与核心组件 Mina的核心组件主要包括`IoService`、`IoProcessor`、`IoFilter`和`IoHandler`。 1. **IoService**:该接口负责管理网络连接,如监听新连接的建立或断开。它拥有一个Selector来监控...

    mina学习资料--很实用

    1. **Mina架构**:Mina基于事件驱动和非阻塞I/O,提供了一个可扩展的框架,允许开发者专注于业务逻辑,而非底层的网络通信细节。 2. **Filter Chain**:Mina的核心设计之一是过滤器链,它允许开发者添加自定义的处理...

    mina服务器和客服端实现

    1. **Mina架构概述** Mina采用了事件驱动和异步I/O模型,通过NIO(Non-blocking I/O)提供高效的数据传输。它的核心组件包括Filter、Session和ProtocolCodec。Filter链允许我们插入自定义逻辑,Session是连接管理器...

    mina作为服务器的用法

    1. **Mina架构**:Mina的核心是I/O处理器,它处理网络连接的建立、读写数据以及断开连接等操作。用户通过实现特定的事件处理器接口(如`SessionListener`、`MessageDecoder`和`MessageEncoder`)来定义业务逻辑。 2...

    Apache Mina入门(完成版)

    1. **Mina架构**:Mina的核心设计理念是事件驱动和异步通信,它采用了I/O多路复用技术,如Java NIO(非阻塞I/O),以提高服务端处理大量并发连接的能力。资料会介绍Mina的组件,如Acceptor、Session和Filter,以及...

    socket通信,mina长连接通信

    1. **MINA架构**:MINA基于NIO(非阻塞I/O),利用Selector进行多路复用,可以在单个线程中处理多个连接,提高系统效率。 2. **长连接**:与传统的Socket短连接不同,长连接保持在客户端和服务器之间长时间打开,...

    mina使用例子

    1. **Mina架构**:Mina采用了事件驱动和异步I/O模型,基于Java NIO(非阻塞I/O)库。它的核心组件包括Acceptor(监听器)、Session(会话)和Filter(过滤器)。Acceptor负责接收连接请求,Session代表每个独立的...

    Apache.Mina.Server.2.0.中文参考手册_李海峰

    #### 三、Mina架构与核心组件 - **IoService**:负责套接字的建立与管理,包含一个Selector用于监听连接请求。 - **IoProcessor**:独立于IoService,在另一个线程上运行,负责检查通道上的读写操作,也拥有自己的...

Global site tag (gtag.js) - Google Analytics