Mina基础(一):基本结构分析、长短连接、IOService

这两天有需要研究一下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

分析:

  1. IoService接口声明了服务端的共有属性和行为;
  2. IoAcceptor接口继承了IoService接口,并添加了服务端特有的接口属性及方法,比如bind()方法,成为典型的服务端接口;
  3. IoConnector接口同样继承了IoService接口,并添加了客户端特有的接口属性及方法,比如connect()方法,成为典型的客户端接口;
  4. AbstractIoService实现了IoService中管理服务的方法,比如getFilterChainBuilder方法---获得过滤器链;
  5. AbstractIoService抽象类继承了AbstractIoService抽象类并实现了IoAcceptor接口,成为了拥有管理服务端实现功能的服务端类;我们常用的NioSocketAcceptor就是它的子类;
  6. AbstractIoConnector抽象类继承了AbstractIoService抽象类并实现了IoConnector接口,成为了拥有管理客户端实现功能的客户端类;我们常用的NioSocketConnector就是它的子类;

---- IoService是IoAcceptor和IoConnector父接口,为什么不直接定义IoAcceptor和IoConnector接口呢?

        因为它们有共同的特点,比如共同属性,管理服务的方法等,所有IoService的出现是为了代码复用。

----为什么有了IoService接口还要定义AbstractIoService抽象类?

        一样为了代码的复用!AbstractIoService抽象类实现了服务端或客户端的共有的管理服务的方法,不需要让IoService接口的子类重复的实现这些方法;

----AbstractIoService抽象类与IoAcceptor(IoConnector)有什么区别?

        很清楚,AbstractIoService抽象类实现的是共有的管理服务的方法,只有管理功能的一个类;而两个接口却是不同的两个服务角色----一个客户端,一个服务端。

待续。

参考:

Apache-mina学习笔记,非常全都资料,附带大量实例

猜你喜欢

转载自blog.csdn.net/x3499633/article/details/81118021
今日推荐