Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP 协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。
Apache Mina也称为:
l NIO框架
l 客户端/服务端框架(典型的C/S架构)
l 网络套接字(networking socket)类库
2、通信流程
那么让我们来看一下mina在我们应用中处于什么样的一个位置呢
上图可以看出mina位于应用程序和底层网络传输之间,它不关心底层网络数据如何传输,只负责接收底层数据,过滤并转换为Java对象提供给我们的应用程序,然后把应用程序响应值过滤并转换为底层识别的字节,提供给底层传输。
再来看一下mina 通信流程图
可以很清晰看出mina主要有三个主要的业务接口:IoService,IoFilter 和 IoHandler
(1) IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。
(2) IoFilter: 这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode
是最为重要的、也是你在使用Mina 时最主要关注的地方。
(3) IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。
总的来说创建一个基于mina框架的应用分为三个模块: 创建连接(IoService))——>添加消息过滤器(IoFilter)——>添加业务处理(IoHandler)
3、server 和 client
mina中server和client没有多大区别都是通过Ioservice 建立连接和通信的,来看下具体流程
Server 一般地,服务端会有一个端口来监听client的请求/packet,并且为每隔connect建立一个session(无论是基于TCP/IP协议还是UDP协议),Server端主要通过IoAccptor建立连接
IOAcceptor 继承自IoService 主要用于监听网络进来的connecter和packet,对于一个新的连接首先会创建一个session,连接创建之后请求消息会从你的地址和监听的端口中进来并封装
所以的packet接收完成之后如上图所示,过滤器链会对其进行过滤,过滤完成之后会交给IoHandler进行业务处理,这就是一个请求到达server后mina的处理流程。
client 一般地,client端主要功能为何server建立连接发送消息和处理server传回的消息,client主要通过IoConnector建立连接,流程如下
1、client端首先通过IoConector与server建立连接,初始化并绑定改到server,连接建立后会和一个session绑定
2、建立连接之后,如果要发送数据到server那么所发送的数据也会经过filter进行过滤器链之后再发送到server
3、当有数据从server返回的时候,再数据全部接收完成之后,数据再经过IoFilter过滤器链最后交给IoHandler处理