mina是一个基于java nio的网络通信框架。主要屏蔽了网络通信的一些细节,对Socket进行封装,并且是NIO的一个实现架构,可以帮助我们快速的开发网络通信,常用于游戏的开发、中间件服务端的程序中。
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个抽象的、事件驱动的异步API,使Java NIO在各种传输协议(如TCP/IP,UDP/IP协议等)下快速高效开发。
Mina最主要的工作就是把底层传输的字节码转换为Java对象,提供给应用程序;或者把应用程序返回的结果转换为字节码,交给底层传输。
总结:
1.默认使用的是JAVA NIO 作为底层支持)操作的编程模型
2.主要屏蔽了网络通信的细节,对socket进行封装,并且是nio的一个实现框架,可以帮助我们快速的进行网络通信、游戏、中间价服务的开发。
3.Mina 的API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、接收的数据以及你的业务逻辑即可。
1.IOService:最底层的是IOService,负责具体的IO相关工作。用于描述我们 的客户端和服务端接口,(IoAccept、IoConnector是子类),分别用于服务端和客户端使用;这一层的典型代表有IOSocketAcceptor和 IOSocketChannel。每当有数据到达时,IOService会先调用底层IO接口读取数据,封装成IoBuffer,之后以事件的形式通知上层代码,从而将Java NIO的同步IO接口转化成了异步IO。所以从下图上看,进来的low-level IO经过IOService层后变成IO Event。
2.IOprocessor:是多线程的环境来处理我们的连接请求;IoProcessor 负责调用注册在 IoService 上的过滤器,并在过滤器链之后调用IoHandler。
3.IOFilter: 这个接口定义一组拦截器,,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。
4.IOHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。需要有开发者自己来实现这个接口。
5.IOsession: 是对底层连接(服务器与客户端的特定连接,该连接由服务器地址、端口以及客户端地址、端口来决定)的封装。
用于描述我们的客户端和服务端的接口,其子类是Connector和Acceptor,Connector描述我们的客户端,Acceptor描述服务端。
Connector描述我们的客户端,Acceptor描述服务端
IOprocessor多线程的环境来处理我们的连接请求流程。
IoFilter提供数据的过滤工作,包括编解码、日志等信息的过滤。
Handler业务对象,自定义handler需要实现IOHanlerAcceptor。
I/O Service层
I/O Filter Chain层
I/O Handler层
服务器端需要创建服务器端Socket,监听指定端口并等待请求的带来。
客户端需要连接到服务器端指定的监听端口,使用网络服务。
服务端:
processor是以nio为基础实现的以多线程的方式来完成读写操作,Java NIO就是基于Reactor模式实现,属于同步非阻塞IO模式 。
这个接口是你编写业务逻辑的地方,读取数据、发送数据基本都在这个接口总完成,这个实例是绑定到IoService 上的,有且只有一个实例(没有给一个IoService 注入一个IoHandler 实例会抛出异常)。
IOSession:描述的是客户端和服务端的连接,常用于接受和发送数据。
初始化好之后加入到processor负责的一个队列中。processor线程会把队列中的session对应的通道都注册到它自己的selector上,然后这个selector轮询这些通道是否准备就绪,一旦准备就绪就调用对应方法进行处理(read or flushNow)
长连接:通信双方长期的保持一个连接状态不断开,一旦建立连接后,就不断开,除非发生异常,比较消耗IO资源。
短连接:通信双方不是保持一个长期的连接状态,比如Http协议,当客户端发起http请求,服务器处理http请求,当服务器处理完成后,返回客户端数据后就断开链接。
默认是代开长连接的,处于监听会话状态,可以改成短连接。如下图 服务端设置
实现了对网络通信的客户端和服务端之间的抽象,子接口IOConnector用于描述客户端,子接口IOAcceptor用于描述服务端。
作用:IOService可以管理我们网络通信的客户端和服务端,并且可以管理连接双方的会话session,同样可以添加过滤器。
常用接口为:IoService,IoAcceptor,IoConnector
常用类为:NioSocketAcceptor,NioSocketConnector
分析:
IoService接口声明了服务端的共有属性和行为;
IoAcceptor接口继承了IoService接口,并添加了服务端特有的接口属性及方法,比如bind()方法,成为典型的服务端接口;
IoConnector接口同样继承了IoService接口,并添加了客户端特有的接口属性及方法,比如connect()方法,成为典型的客户端接口;
AbstractIoService实现了IoService中管理服务的方法,比如getFilterChainBuilder方法---获得过滤器链;
AbstractIoService抽象类继承了AbstractIoService抽象类并实现了IoAcceptor接口,成为了拥有管理服务端实现功能的服务端类;我们常用的NioSocketAcceptor就是它的子类;
AbstractIoConnector抽象类继承了AbstractIoService抽象类并实现了IoConnector接口,成为了拥有管理客户端实现功能的客户端类;我们常用的NioSocketConnector就是它的子类;
1.ioservice
2.ioconector
3.ioAcceptor
4.NIOsocketAcceptor
5.NIOsocketConnector