MIna框架I/O Service层设计

简介:

Mina从2.0版本以后,它的设计让人感觉到非常的优雅。它对网络应用通信框架的3个层进行了更好的抽象,以及在功能逻辑上的划分,同时又保证了 作为一个网络应用通信框架的统一。划分的3个层分别为:

  • I/O Service层
  • I/O Filter Chain层
  • I/O Handler层

这里,我们重点关注I/O Service层。作为一个基于网络通信的应用,无论是服务器还是客户端角色,都要和网络I/O打交道,比如,服务器端需要创建服务器端Socket,监听指定端口并等待请求的带来,而客户端需要连接到服务器端指定的监听端口,使用网络服务。一般来说,这些I/O操作都比较复杂,而且很难在编 码中进行很好地控制,Mina的I/O Service层就是处理这些与实际的网络I/O相关的操作(事件)。
我们先看一下,对于服务器端和客户端,I/O Service层是如何设计的。类设计上的关系,作为这一层的最顶层抽象就是IoService接口类,如图所示:

通过上图,我们可以看到,IoService抽象的服务(功能)有如下几个:

  • 管理IoSession:创建和删除IoSession,探测会话Idle状态
  • Filter Chain管理:处理过滤器链,允许用户修改过滤器链执行顺序
  • Handler的调用:当指定事件发生的时候,负责调用Handler进行处理
  • 统计数据管理:更新消息发生的数量,以及传输的字节数,等等
  • 监听器管理:管理用户设置的Listener
  • 通信管理:管理端到端数据传输

具体可以参考源代码中定义的方法。
下面看看在服务器端和客户端,Mina是如何使用IoService进行抽象和设计的。

服务器端I/O Service层
在服务器端,对应于该层的抽象是IoAcceptor接口,IoAcceptor继承自IoService。具体的类设计上的关系,如图所示:

上图中,主要基于网络传输层协议TCP和UDP内置了对应IoAcceptor的实现,还附加了另外两个,如下所示:

  • NioSocketAcceptor
  • NioDatagramAcceptor
  • AprSocketAcceptor
  • VmPipeSocketAcceptor

根据实现类的命名就可知道各个类对应的应用场景。这里要说的是,前两个NioSocketAcceptor和NioDatagramAcceptor 都是基于非阻塞Socket的。AprSocketAcceptor是基于APR(Apache portable Run-time)的阻塞 Socket实现。

客户端I/O Service层
在客户端,对应于该层的抽象是IoConnector接口,IoConnector继承自IoService。具体的类设计上的关系,如图所示:

上图中给出了IoConnector的6个实现,如下所示:

  • NioSocketConnector
  • NioDatagramConnector
  • AprSocketConnector
  • ProxyConnector
  • SerialConnector
  • VmPipeConnector

上面的ProxyConnector是提供了代理支持的IoConnector,SerialConnector是支持串行传输数据的 IoConnector,VmPipeConnector就是in-VM的IoConnector。

目录
相关文章
|
6月前
|
存储 前端开发 Java
一篇文章带你搞懂Controller、Service等各层的功能与作用
本文将深入探讨这些controller.service等层的作用与功能,帮助读者更好地理解它们在软件开发中的重要性和运作原理。
2142 0
|
4月前
|
测试技术
领域驱动设计问题之什么是领域服务(Domain Service),它与应用层服务有何区别
领域驱动设计问题之什么是领域服务(Domain Service),它与应用层服务有何区别
8163 0
|
3月前
|
设计模式 Java 测试技术
分层设计:Service 层真的需要实现接口吗?
【8月更文挑战第4天】在软件开发领域,分层设计是一种广泛应用且高效的设计模式,它通过将系统划分为不同的逻辑层(如表现层、服务层、数据访问层等),来提高代码的可维护性、可扩展性和可测试性。其中,Service层作为业务逻辑处理的核心,其设计尤为重要。那么,Service层是否真的需要实现接口呢?这个问题值得我们深入探讨。
154 8
|
6月前
|
负载均衡 Dubbo Java
Service Mesh 的基本模式
【5月更文挑战第16天】Service Mesh分为两种模式:Sidecar和第二代Service Mesh。
|
存储 前端开发 Java
Service 层异常抛到 Controller 层处理还是直接处理?
Service 层异常抛到 Controller 层处理还是直接处理?
430 1
|
SQL 前端开发 Java
DAO层和Service层的究极理解--这波我在大气层
DAO层和Service层的究极理解--这波我在大气层
255 0
|
Kubernetes 前端开发 网络协议
【k8s 系列】k8s 学习十九,service 2 暴露服务的 3种 方式
之前我们简单的了解一下 k8s 中 service 的玩法,今天我们来分享一下 service 涉及到的相关细节,我们开始吧
237 0
|
Kubernetes 监控 Perl
【k8s 系列】k8s 学习二十七 - 6,k8s 自身原理之 Service
好不容易,终于来到 k8s 自身的原理之 关于 Service 的一部分了 前面我们用 2 个简图展示了 pod 之间和 pod 与 node 之间是如何通信息的,且通信的数据包是不会经过 NAT 网络地址转换的
|
域名解析 Kubernetes 负载均衡
k8s service 概念和原理
详细讲解k8s的概念和原理
823 0
k8s service 概念和原理
|
Kubernetes 负载均衡 网络协议
K8S Service底层策略初探和分析
K8S Service底层策略初探和分析
117 0