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。
MIna框架I/O Service层设计相关推荐
- (转)淘淘商城系列——SSM框架整合之Service层整合
http://blog.csdn.net/yerenyuan_pku/article/details/72721108 上文我们一起学习了Dao层的整合,本文将教大家如何整合Service层. 我们 ...
- php yii2 service层,卩大王叫我来巡山
# 序言 #### service是什么? 在面向OO的系统里,service就是biz manager,在面向过程的系统里service就是TS脚本. ### service有什么作用? servi ...
- Java Web学习总结(30)——Service层在MVC框架中的意义和职责
mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层设计, ...
- java 框架 Dao层 Mapper层 controller层 service层 model层 entity层 简介
目录 简介 entity层 mapper层 service层 controller层 简介 SSM是sping+springMVC+mybatis集成的框架. MVC即model view contr ...
- service 层 拼接的html 代码如何直接返回_代码分层的设计之道
分层思想,是应用系统最常见的一种架构模式,我们会将系统横向切割,根据业务职责划分.MVC 三层架构就是非常典型架构模式,划分的目的是规划软件系统的逻辑结构便于开发维护.MVC:英文即 Model-Vi ...
- 对SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层等层的理解
SSM 是 Spring + SpringMVC + Mybatis集成的框架. MVC即model view controller.(模型,视图,控制器) 一.entity层(model层,doma ...
- SSM框架中各层的含义和联系(Pojos层、Dao层、Service层、Action层......)
一.pojo层 即Plain Ordinary Java Object,也有人称其为model.domain.bean等,pojo层是对应的数据库表的实体类. 二.1.持久层:Dao层(Mapper) ...
- 如何设计Service层
在初学Spring时曾被Service绕晕,为何MVC模式下会多出一个Service层?设计Service时候为何需要先写一个接口,然后再去实现?Service之间是否可以相互调用?而这篇文章就是当初 ...
- javaweb开发设计Service层
Service从何而来 Spring MVC,是一个MVC框架,提到MVC,大家都不陌生,简单说一下,M为模型层,处理数据逻辑,V为视图层,负责展示,而C为控制层,负责M与V的交互. 在我大学的课堂上 ...
最新文章
- mysql5.6允许远程连接_mysql允许远程连接的方法
- shell / 获取当前工作目录的方法
- java压缩对象_Java 对象指针压缩
- linux指令快速复制粘贴[龟速更新中]
- 【C】@程序员,我们送给你一个成熟的Excel导入导出组件
- Win11如何清理D盘垃圾
- Django复习:模型与管理网站
- 摄像头,一万块三个,嘿嘿!欢迎来到一年一度iPhone 吐槽大会!
- 怎样实现短信验证功能
- Python中的运算符与表达式
- 网页优化系列三:使用压缩后置viewstate
- 感谢贫穷,是贫穷限制了人们的善良
- mysql怎么求平均体重_怎样计算平均身高和平均体重
- 【J2EE】在项目中理解J2EE规范
- java.util.Arrays$ArrayList addAll报错
- c语言弹窗口的,弹窗代码 javascript如何编写一直弹窗口代码
- 宝塔面板部署网易云api
- SpringMVC原理
- GitHub 爬虫项目
- VDN互联网数据驱动 FOR PB
热门文章
- 距离和相似性度量方法
- 结合Scikit-learn介绍几种常用的特征选择方法
- CF183D T-shirt
- 斯坦福公开课3:欠拟合与过拟合
- Working with multiple environments
- 线程同步思考 - Condition模块
- anaconda安装scrapy失败的解决方法(2020.7.7)
- MySQL5.7.11免安装版的安装和配置以及解决MYSQL服务无法启动问题
- python开课吧官网_开课吧老师详解 学Python真的可以帮助提高办公效率吗
- javascript中的面向对象_面向对象和函数式编程的本质区别