MINA体系结构分析

xiaoxiao2021-02-28  28

一.MINA简介及概述

1、Mina的介绍

Mina是Apche开发的一个基于NIO的网络开源应用框架,是非阻塞模式,使用它编写程序时,可以专注于业务处理,而不用过于关心IO操作。不论应用程序采用什么协议(TCP、UDP)或者其它的,Mina提供了一套公用的接口,来支持这些协议。目前可以处理的协议有:HTTP, XML, TCP, LDAP, DHCP, NTP, DNS, XMPP, SSH, FTP... 。从这一点来说,Mina不仅仅是一个基于NIO的框架,更是一个网络传输层协议的实现。

2、网络分层结构

OSI的7层从上到下分别是:(7)应用层 (6)表示层 (5)会话层 (4)传输层 (3)网络层(2)数据链路层(1)物理层

其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。

3、Mina在应用程序中处于什么样的位置?

主要屏蔽了网络通信的一些细节,对socket进行封装,并且是NIO的一个实现架构,可以帮助我们快速的开发网络通信,常常用于游戏的开发,中间件等服务端程序。

二.MINA设计架构

1、MINA整体架构

2、MINA各种组件

上面这个图说明了Mina的处理大致流程。从这个图上也可以看出,大致包括了3个部分:

IoService:执行实际的IO操作,管理 I/O会话。IoFilter Chain:将数据进行过滤或者转换为期望的数据结构,反之亦然。IoHandler:实际的业务操作。

所以如果想要使用Mina编写程序,只需要下列3步即可:

创建IoService。添加IoFilter到FilterChain编写处理业务逻辑的IoHandler

1)IoService说明

 编写网络程序,一般都分为Server/Clinet。 

(1)IoService接口描述的是客户端和服务端连接的一个抽象,常常用于接收和发送数据。其两个子接口为IoAcceptor和IoConnector,分别用于描述我们的客户端和服务端及IOproceser 多线程环境来处理我们的连接请求。

(2)服务端通过创建一个NioSocketAcceptor来接受请求,客户端通过创建NioSocketConnector来连接服务端并发送请求

(3)Mina为Server端程序提供的IoService实现是IoAcceptor,为客户端提供的实现是IoConnector。IoAcceptor用来接受连接,与客户端进行通讯。IoConnector用来发起连接,与服务端进行通讯。IoAcceptor和IoConnector都分别有基于TCP/IP协议协议,UDP/IP协议以及虚拟机管道通讯的子接口。

Server端实现:

Clint端实现:

2)IoSession说明

Session,这个词都不陌生。在Web开发中有Session的概念,在Hibernate中有Session的概念。Session就是对连接会话的封装,存储一些状态信息。同样在Mina中也有Session的概念。

在Mina会为每一个连接创建Session,并存储在内存中,直到与Client之间连接断开。

3)IoFilter说明

提供数据的过滤工作起到过滤器的作用并可以加入各种过滤器,以及它的运行原理,开发过Web应用程序的人应该都是知道的。IoFilter的原理与Web应用中的Filter是一样的,这里就不在赘述。如果不清楚Filter的原理,可以参考这里。 使用过滤器可以做哪些事情呢?

(1)日志记录

(2)根据协议对数据进行编码、解码。如下:

应用程序(Java对象或则基本数据类型)  ----- 网络(编码二进制)  -----  业务程序(解码成原数据)

好处是两个程序可以通过网络传输数据,速度比较快。

拓展:Java 不支持显式输入二进制,默认为 10 进制,0 开头为8进制,比如 01111,0x开头为16 进制,比如 0x11。。。

数据存储是以10进制byte字节表示,数据传输是以2进制bit表示的 --> 1byte = 2(0xFFFF) = 8bit

(3)SSL处理

4)IoHandler说明

    Handler就是我们的业务对象,自定义的 Handler 需要继承 IoHandlerAdapter。IoHandler是在最后一个Filter中调用的。主要实现的方法是messageReceived()。就是写你接收到数据后要处理的业务逻辑。

3、大致的类图结构

                                                 IoService

                        IoConnector                          IoAcceptor

                NioSocketConnector              NioSocketAcceptor

总结流程:客户端  IoConnector》IOproceser 》IoFilter》IoHandler

                 服务端  IoAcceptor》IOproceser 》IoFilter》IoHandler

三.MINA的长短连接

1、长连接的定义

概念:通信双方长期保持一个连接状态不断开,比如腾讯qq,当我们登录qq的时候,我们就去连接我们腾讯服务器,一旦建立连接后,就不断开,除非发生异常,这样方式就是长连接。缺点:对于长连接比较耗费IO资源。

2、短连接的定义

概念:通信双方不是保持一个长期连接状态,比如http协议,当客户端发起http请求时,服务器进行处理 ,当服务器处理完成后,返回客服端数据后就断开连接,对于下次的连接请求需要重新发起,这种方式使我们常使用的。缺点:不能使用session会话保持连接。

总结:对于Mina我们用session属性来保持会话,采用的是长连接方式,不断接受客户端的数据,这次我们使用短连接的方式。

3、Mina短连接的实现

在服务端Handler处理中,继承IoHandlerAdapter类,实现了messageSent()方法,这个方法主要是发送数据,当我们将发送数据后进行关闭session,就变成了短连接。全部代码请看:MINA快速开发Demo

@Override public void messageSent(IoSession session, Object message) throws Exception { System.out.println("messageSent:" + "发送数据"); session.close(); }

 

转载请注明原文地址: https://www.6miu.com/read-2619629.html

最新回复(0)