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层设计相关推荐

  1. (转)淘淘商城系列——SSM框架整合之Service层整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72721108 上文我们一起学习了Dao层的整合,本文将教大家如何整合Service层.  我们 ...

  2. php yii2 service层,卩大王叫我来巡山

    # 序言 #### service是什么? 在面向OO的系统里,service就是biz manager,在面向过程的系统里service就是TS脚本. ### service有什么作用? servi ...

  3. Java Web学习总结(30)——Service层在MVC框架中的意义和职责

    mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面. mvc模式是web开发中的基础模式,采用的是分层设计, ...

  4. java 框架 Dao层 Mapper层 controller层 service层 model层 entity层 简介

    目录 简介 entity层 mapper层 service层 controller层 简介 SSM是sping+springMVC+mybatis集成的框架. MVC即model view contr ...

  5. service 层 拼接的html 代码如何直接返回_代码分层的设计之道

    分层思想,是应用系统最常见的一种架构模式,我们会将系统横向切割,根据业务职责划分.MVC 三层架构就是非常典型架构模式,划分的目的是规划软件系统的逻辑结构便于开发维护.MVC:英文即 Model-Vi ...

  6. 对SSM框架中Dao层,Mapper层,controller层,service层,model层,entity层等层的理解

    SSM 是 Spring + SpringMVC + Mybatis集成的框架. MVC即model view controller.(模型,视图,控制器) 一.entity层(model层,doma ...

  7. SSM框架中各层的含义和联系(Pojos层、Dao层、Service层、Action层......)

    一.pojo层 即Plain Ordinary Java Object,也有人称其为model.domain.bean等,pojo层是对应的数据库表的实体类. 二.1.持久层:Dao层(Mapper) ...

  8. 如何设计Service层

    在初学Spring时曾被Service绕晕,为何MVC模式下会多出一个Service层?设计Service时候为何需要先写一个接口,然后再去实现?Service之间是否可以相互调用?而这篇文章就是当初 ...

  9. javaweb开发设计Service层

    Service从何而来 Spring MVC,是一个MVC框架,提到MVC,大家都不陌生,简单说一下,M为模型层,处理数据逻辑,V为视图层,负责展示,而C为控制层,负责M与V的交互. 在我大学的课堂上 ...

最新文章

  1. mysql5.6允许远程连接_mysql允许远程连接的方法
  2. shell / 获取当前工作目录的方法
  3. java压缩对象_Java 对象指针压缩
  4. linux指令快速复制粘贴[龟速更新中]
  5. 【C】@程序员,我们送给你一个成熟的Excel导入导出组件
  6. Win11如何清理D盘垃圾
  7. Django复习:模型与管理网站
  8. 摄像头,一万块三个,嘿嘿!欢迎来到一年一度iPhone 吐槽大会!
  9. 怎样实现短信验证功能
  10. Python中的运算符与表达式
  11. 网页优化系列三:使用压缩后置viewstate
  12. 感谢贫穷,是贫穷限制了人们的善良
  13. mysql怎么求平均体重_怎样计算平均身高和平均体重
  14. 【J2EE】在项目中理解J2EE规范
  15. java.util.Arrays$ArrayList addAll报错
  16. c语言弹窗口的,弹窗代码 javascript如何编写一直弹窗口代码
  17. 宝塔面板部署网易云api
  18. SpringMVC原理
  19. GitHub 爬虫项目
  20. VDN互联网数据驱动 FOR PB

热门文章

  1. 距离和相似性度量方法
  2. 结合Scikit-learn介绍几种常用的特征选择方法
  3. CF183D T-shirt
  4. 斯坦福公开课3:欠拟合与过拟合
  5. Working with multiple environments
  6. 线程同步思考 - Condition模块
  7. anaconda安装scrapy失败的解决方法(2020.7.7)
  8. MySQL5.7.11免安装版的安装和配置以及解决MYSQL服务无法启动问题
  9. python开课吧官网_开课吧老师详解 学Python真的可以帮助提高办公效率吗
  10. javascript中的面向对象_面向对象和函数式编程的本质区别