MINA 框架是有java语言编写的一个开源的网络框架。由于最近在学习openfire,其中用到了这个框架,所以花了些时间研究研究这个框架。
先来看看在MINA基础上编写的应用 的整体架构:
可以看到,MINA的位置处于 用户程序和Java 网络API之间。其屏蔽了底层网络层的复杂性,给用户程序提供了一个良好的接口。
接下来看看MINA的内部组件结构:
一般来说,在MINA基础上编写的应用程序可以被分为3个层:
- I/O Service - 执行实际的IO,即从底层读取远程发来的数据或将本地数据写入底层发往远端
- I/O Filter Chain - 顾名思义,可以看作是一个过滤器链,可以在数据真正被提交到I/O Handler之前进行一些操作或筛选,如将收到的字节转换成上层可以识别的数据结构等。
- I/O Handler - 真正的处理逻辑存在这这里,会有一些事件供框架调用,如MessageReceived, sessionClose等事件
因此,要编写MINA应用程序,需要依次创建上面三层
接下来看看MINA应用的详细结构,首先来看看Server端的架构:
整个运行过程如下:
- IOAcceptor 监听网络上到来的新连接请求或数据包
- 对于一条新的连接,MINA会创建一个新的sesssion,之后该连接上到来的请求均会被提交给这个对应的session
- 所有在一个session上面收到的packet,都会经过FilterChain中添加的所有的过滤器。过滤器可以被用来修改收到的分组的内容。如将原始字节转换为高层对象等。
- 最后,转换后的对象被提交给IOHandler进行处理。
再来看看Client端的应用架构:
其运行机制如下:
- Client首先创建一个IOConnector 对象,以远程服务器的相关信息进行初始化
- 一旦连接建立之后,会创建一个session关联到该连接上
- 应用程序向session写数据,这些数据经过FilterChain之后被发往远程server
- 所有来自远程server的响应/消息 在经过FilterChain之后被提交给IOHandler进行处理
以上便是MINA应用的结构,在后续的文章中会详细介绍其中的三个层次的相关知识。