02.28 出身名门的 Mina 通信框架,可靠且省时

出身名门的 Mina 通信框架,可靠且省时

随着网络通信技术的发展速度加快,互联网应用对高并发、高可用的要求越来越高,分布式、弹性伸缩的架构逐渐成为开发人员常用的技术了。


在Java NIO通信框架中,出身于开源界的大牛Apache组织的Mina通信框架为开发者们提供了很大的便利。


那Mina框架的执行流程是怎么样的呢?异步君带大家来了解一下Mina设计架构吧!


Mina设计架构


Mina 框架是 Apache 开源的一款网络通信应用框架。使用 Mina 框架可以帮助用户开发高性能和高伸缩性的网络应用框架。

Mina 提供了一个抽象的事件驱动,开发者既可以通过 Java NIO 实现 TCP/IP 和 UDP/IP 等协议的数据传输,也可以在 VM 内管道通信。Mina 对于传输不同类型数据,

提供了一整套的 API,极大地减少了开发者的开发时间。


在客户端与服务器端连接成功之后,可以抽象地认为客户端与服务器端建立了一个通信管道, IoSession 就是负责在管道中传输数据和接收数据的管理者,同时 Mina 提供了过滤器,能够增强开发者对管道的管理。在 IoHandler 作为 Mina 执行流程的末端,需要开发者在 IoHandler 中实现业务逻辑的编码。


对于在互联网 TCP 协议传输数据包的时候,Mina 提供了编码解码过滤器,帮助开发者解决粘包和断包问题处理,同时 Mina 也支持开发者自定义数据包的编码和解码操作。


Mina整体架构


在 Mina 运行架构中,开发者只需要关注应用程序开发即可。Mina 会自动把开发者的应用程序和底层网络层之间黏合起来,开发者不需要考虑网络通信中底层的实现。


也就是说,Mina 起到的是黏合剂的作用。这里说的应用程序是指 Mina 建立的客户端应用程序或者 Mina 建立的一个后端应用程序,如图所示。

出身名门的 Mina 通信框架,可靠且省时

Mina存在于中间层,开发者只需要关注于Mina顶部的设计,即应用程序设计。也就是说,开发者根据业务需求开发出对应的应用程序即可。


至于 Mina 底层网络数据的传输,不需要开发者去关心。对于Mina黏合底层网络层,可以基于TCP 协议、UDP 协议或者 VM 通信。


Mina 负责接收底层网络数据 之后,并且通过过滤器编码或者解码,把数据转化成开发者需要的数据包,返回到开发者的应用程序中。


Mina执行流程


Mina 整体执行流程分为服务器端执行流程和客户端执行流程。无论是服务器端执行流程,还是客户端执行流程两者都具有很大的共性:需要在应用程序中新建 IoService 服务。


IoService服务分为两种,一种是包括开启Mina服务器端接收器 IoAcceptor,另一种是Mina客户端连接服务器端的IoConnector连接器。接着在IoFilterChain 中创建过滤链。

在创建过滤链的时候,开发者根据项目需求的选择 Mina 自带的过滤 器,增强对应用程序的控制。最后在 IoHandler 中实现开发者业务逻辑处理。


Mina服务器端执行流程

对于 Mina 服务器端执行流程主要分为3步:首先 IoAcceptor 接收器监听端口号,或者监听IP地址和端口号,实现接收客户端新建连接或者接收客户端发送来服务器端的数据包。


接着开始遍历在开启Mina接收器时,加入的过滤链中的过滤器,在加载完过滤器之后,数据就会传输到 IoHandler 中,在 IoHandler 中开发者需要根据需求实现业务逻辑代码。接收器执行流程如图所示。

出身名门的 Mina 通信框架,可靠且省时


当接收器IoAcceptor接收到有新客户端连接的时候,就会为这位客户端创建对应新的会话IoSession,服务器端通过操作这个会话IoSession实现对客户端发送数据、接收数据或者接收客户端的请求等操作。


IoFilter过滤器可以用来解析数据包的内容或者增强对应用程序流程的控制等操作,例如,当开发者使用自定义编码和解码器的时候,需要判断此刻服务器端接收的数据包是否完整,是否出现粘包或者断包现象;当发现非法IP地址连接的时候,直接拒绝非法客户端的连接。


在IoFilter中,开发者根据需要实现项目中自定义的编码解码。执行完IoFilter 过滤链之后,后端通过 IoSession 发送数据包到客户端。


Mina客户端执行流程


Mina 客户端执行流程也是分为 3 个部分,客户端通过 IoHandler 从服务器端接收所有响应请求和消息之后,通过开发者在 IoConnector 连接服务器时,遍历加入过滤链的过滤器,接着通过 IoConnector 发送数 据到服务器端。Mina 客户端执行流程如图 所示。

出身名门的 Mina 通信框架,可靠且省时


在客户端中负责连接后端的 IoConnector 连接器,客户端在新建连接的时候,指定服务器端的 IP 地址和端口号进行连接,在客户端连接成功之后,就会创建与服务器端关联的会话 IoSession,客户端通过这个会话 IoSession,向服务器端发送消息,在发送消息之前,连接器会遍历过滤链中开发者在客户端加入的编码模式,在对数据包进行编码完成之后,向后端发送数据包。


Mina 执行流程无论是客户端,还是服务器端都需要经过过滤链,遍历开发者加入过滤链中的过滤器,过 滤器在其中的作用至关重要,在加入过滤器的时候,可以加入日志过滤器、开发者自定义的编码解码过 滤工厂等。


在 IoService 中会把 NIO 烦琐的部分进行封装,提供简洁的接口给开发者使用。IoService 分为 Mina 服务器端接收器 IoAcceptor 和 Mina 客户端连接器 IoConnector。


在 Mina 客户端连接器 IoConnector 连接成功之后,就生成一个与服务器端关联是 IoSession,开发者根据获得的 IoSession 向后端 发送数据包,同样的,对服务器而言,接收器成功接收客户端连接器连接之后,也会与成功连接的每一 个客户端连接器生成一个关联的 IoSession,服务器端通过操作 IoSession,可以向每一个连接成功客户端 发送数据包。


分享到:


相關文章: