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接口类,如图所示:
![9662b4d1292bcf610db8c3a98d11b835abf9d33c](https://oss.aliyuncs.com/yqfiles/9662b4d1292bcf610db8c3a98d11b835abf9d33c.png)
通过上图,我们可以看到,IoService抽象的服务(功能)有如下几个:
管理IoSession:创建和删除IoSession,探测会话Idle状态 Filter Chain管理:处理过滤器链,允许用户修改过滤器链执行顺序 Handler的调用:当指定事件发生的时候,负责调用Handler进行处理 统计数据管理:更新消息发生的数量,以及传输的字节数,等等 监听器管理:管理用户设置的Listener 通信管理:管理端到端数据传输具体可以参考源代码中定义的方法。
下面看看在服务器端和客户端,Mina是如何使用IoService进行抽象和设计的。
服务器端I/O Service层
在服务器端,对应于该层的抽象是IoAcceptor接口,IoAcceptor继承自IoService。具体的类设计上的关系,如图所示:
![7b77ec1a98c57eb8a9006ed2d6510db1414244e4](https://oss.aliyuncs.com/yqfiles/7b77ec1a98c57eb8a9006ed2d6510db1414244e4.png)
上图中,主要基于网络传输层协议TCP和UDP内置了对应IoAcceptor的实现,还附加了另外两个,如下所示:
NioSocketAcceptor NioDatagramAcceptor AprSocketAcceptor VmPipeSocketAcceptor根据实现类的命名就可知道各个类对应的应用场景。这里要说的是,前两个NioSocketAcceptor和NioDatagramAcceptor 都是基于非阻塞Socket的。AprSocketAcceptor是基于APR(Apache portable Run-time)的阻塞 Socket实现。
客户端I/O Service层
在客户端,对应于该层的抽象是IoConnector接口,IoConnector继承自IoService。具体的类设计上的关系,如图所示:
![03c4134f99103769c75b45de5642d1156ef2e58a](https://oss.aliyuncs.com/yqfiles/03c4134f99103769c75b45de5642d1156ef2e58a.png)
上图中给出了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 接口
相关文章
- 基于SSM框架的毕业设计管理系统的设计与实现(附资源下载)
- Java集合框架-Collection01-堆栈
- Appium PO模式UI自动化测试框架——设计与实践
- python爬虫scrapy框架_python主流爬虫框架
- 基于深度学习框架设计的货运管家(功能总结)
- SAP OData 框架里的缓存(Cache)设计专题讲座试读版
- 站在开发者的角度理解框架的设计思想
- API接口自动化测试框架搭建之需求整理、详细设计和框架设计
- 谷歌开源、高性能RPC框架:gRPC 使用体验
- Selenium4+Python3系列(十二) - 测试框架的设计与开发
- 数字中国顶层设计来了,一图读懂“2522”框架|政策解读
- 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “宿主“ 应用中的 Element[] dexElements )
- 【Android 逆向】frida 框架安装 ( 设置 Python 3.7 版本 | 安装 frida 12.7.5 版本 | 安装 frida-tools 5.1.0 版本 )
- Pinecone:一款专为红队研究人员设计的WLAN网络安全审计框架
- 新一波JavaScript Web框架
- LinuxGUI自动化测试框架搭建-总体需求&详细设计&框架设计
- JavaMyBatis框架初步学习总结详解编程语言
- 全文检索Lucene(四)—Compass框架详解编程语言
- 基于Java的轻量级异步编程框架
- TP框架与Redis结合,提升开发效率(tp如何结合redis)
- JavaScript异步调用框架(Part2-用例设计)
- Laravel框架学习笔记(一)环境搭建