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。

目录
相关文章
fbh
|
关系型数据库 MySQL 数据库
mysql数据库执行mysqladmin flush-hosts方法
当连接错误次数过多时,mysql会禁止客户机连接,这个时候有两个办法解决: 1.使用mysqladmin flush-hosts命令清除缓存,命令执行方法如下: 命令行或终端:mysqladmin  -u  root  -p  flush-hosts 接着输入root账号密码即可   2.
fbh
8247 0
|
4月前
|
人工智能 API iOS开发
OpenClaw是什么?OpenClaw能做什么?OpenClaw介绍及+阿里云/本地部署+免费大模型配置教程
OpenClaw(前身为Clawdbot/Moltbot)是一款遵循MIT协议的开源AI自动化代理引擎,以“本地优先、可执行任务”为核心定位,实现了从“对话式建议”到“自动化执行”的跨越。它区别于传统对话式AI,通过“意图解析→任务规划→工具调用→结果反馈”的完整闭环,在本地或私有云环境中完成文件操作、流程编排、浏览器自动化等真实任务,成为个人与企业的自托管式AI数字员工。本文将详细解析OpenClaw的核心特性与应用场景,完整呈现2026年阿里云及本地MacOS/Linux/Windows11的部署流程,提供阿里云百炼及Coding Plan免费大模型的配置方法,并整理常见问题解答,帮助用户
1169 8
|
弹性计算 自然语言处理 开发工具
通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统
本文介绍如何通过整合阿里云Milvus、阿里云DashScope Embedding模型与阿里云PAI(EAS)模型服务,构建一个由LLM(大型语言模型)驱动的问题解答应用,并着重演示了如何搭建基于这些技术的RAG对话系统。
通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统
|
存储 C++ Java
C++ 指针详解:从入门到理解内存的本质
指针是C++中高效操作内存的核心工具,掌握它等于掌握程序底层运行机制。本文系统讲解指针基础、数组关联、动态内存管理及常见陷阱,助你避开“悬空”“野指针”等雷区,善用智能指针,真正实现“指”掌全局。#C++指针入门
727 156
|
6月前
|
NoSQL MongoDB 数据安全/隐私保护
基于 Docker 的 MongoDB 部署与使用指南
本指南面向不同层级开发者,详解 MongoDB 6.0 + Docker 部署:从单节点开发环境到高可用副本集生产部署,涵盖初始化、备份恢复、安全认证、监控告警及常见问题排查,助力高效构建稳定可靠的 MongoDB 服务。
813 1
|
7月前
|
测试技术 API C#
一个 .NET 开源免费、功能强大的 UI 自动化库
FlaUI 是一个 .NET 平台开源免费的 UI 自动化测试库,基于 Microsoft UI Automation,支持 Win32、WPF、WinForms 等桌面应用自动化,提供灵活 API,助力高效编写自动化脚本,适用于功能、回归及 UI 验证测试。
512 5
|
8月前
|
机器学习/深度学习 人工智能 程序员
StackOverflow已经死亡了吗
StackOverflow曾是程序员的“圣地”,但AI崛起正改变这一格局。ChatGPT等工具以高效即时的优势分流用户,使其面临流量下滑与社区文化挑战。而新兴的大模型实验室Lab4AI则融合算力、实践与协作,构建AI时代下的开发者新生态。从问答到实践,开发者社区正在进化。
475 2
StackOverflow已经死亡了吗
|
搜索推荐 Python
为啥说选择排序是不稳定的
选择排序是一种简单但不稳定的排序算法。它通过每轮选择最小元素并交换位置来实现排序,但这种交换可能破坏相同值元素的相对顺序。例如对数组 `[5, 8, 5, 2]` 排序后,两个 `5` 的顺序会发生变化,从而证明其不稳定性。
881 0
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
3108 20
|
Kubernetes 前端开发 Dubbo
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)