zl程序教程

您现在的位置是:首页 >  前端

当前栏目

MIna框架I/O Service层设计

框架 设计 Service MINA
2023-09-14 08:57:29 时间

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接口类,如图所示:

9662b4d1292bcf610db8c3a98d11b835abf9d33c

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

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

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

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

7b77ec1a98c57eb8a9006ed2d6510db1414244e4

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

NioSocketAcceptor NioDatagramAcceptor AprSocketAcceptor VmPipeSocketAcceptor

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

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

03c4134f99103769c75b45de5642d1156ef2e58a

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

NioSocketConnector NioDatagramConnector AprSocketConnector ProxyConnector SerialConnector VmPipeConnector

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


controller层设计 MVC架构下,我们的web工程结构会分为三层,自下而上是dao层,service层和controller层。controller层为控制层,主要处理外部请求。调用service层,一般情况下,controller层不应该包含业务逻辑,controller的功能应该有以下五点: ⑴、接收请求并解析参数 ⑵、业务逻辑执行成功做出响应 ⑶、异常处理 ⑷、转换业务对象 ⑸、调用 Service 接口