这两天有需要研究一下Mina的基本使用方法,文章自己在网络笔记中先好的好,复制过来后排版可能不太好,多多包涵。
1、在应用程序中的地位
主要屏蔽了网络通信的一些细节,对Socket进行封装,并且是NIO的一个实现架构,可以帮助我们快速的开发网络通信,常用于游戏的开发、中间件服务端的程序中。
Mina最主要的工作就是把底层传输的字节码转换为Java对象,提供给应用程序;或者把应用程序返回的结果转换为字节码,交给底层传输。
2、IOService接口
用于描述我们的客户端和服务端的接口,其子类是Connector和Acceptor,分别用于描述我们的客户端和服务端。
IOprocessor多线程的环境来处理我们的连接请求流程。
IoFilter提供数据的过滤工作,包括编解码、日志等信息的过滤。
Handler业务对象,自定义handler需要实现IOHanlerAcceptor。
3、Mina类图结构
IOSession:描述的是客户端和服务端的连接,常用于接受和发送数据。
4、长短连接
长连接:通信双方长期的保持一个连接状态不断开,一旦建立连接后,就不断开,除非发生异常,比较消耗IO资源。
短连接:通信双方不是保持一个长期的连接状态,比如Http协议,当客户端发起http请求,服务器处理http请求,当服务器处理完成后,返回客户端数据后就断开链接。
IOService接口详解
实现了对网络通信的客户端和服务端之间的抽象,子接口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就是它的子类;
---- IoService是IoAcceptor和IoConnector父接口,为什么不直接定义IoAcceptor和IoConnector接口呢?
因为它们有共同的特点,比如共同属性,管理服务的方法等,所有IoService的出现是为了代码复用。
----为什么有了IoService接口还要定义AbstractIoService抽象类?
一样为了代码的复用!AbstractIoService抽象类实现了服务端或客户端的共有的管理服务的方法,不需要让IoService接口的子类重复的实现这些方法;
----AbstractIoService抽象类与IoAcceptor(IoConnector)有什么区别?
很清楚,AbstractIoService抽象类实现的是共有的管理服务的方法,只有管理功能的一个类;而两个接口却是不同的两个服务角色----一个客户端,一个服务端。
待续。
参考: