当前位置: 首页 > ai >正文

tigase源码学习杂记-组件化设计

前言

tigase官方号称高度抽象和组件化。这篇文章就记录一下我研究组件化的相关设计

概述

我的理解tigase高度组件化是所有的关键的功能的类,它都称之为组件,即只要继承于BasicComponent,它都可以成为组件,BasicComponent类实现了基于组件的实现和抽象了所有组件需要完成的操作和定义。我们自定义组件的时候,只需要定义一个类继承BasicComponent类,然后重写我们的自己需要的方法就行了,加载组件的时候就只需要在配置文件(config.tdsl)中新增一行组件的类信息(如下所示:自定义MyComponent组件)

myComponentName (class: tigase.muc.MyComponent) {}

tigase就能利用反射加载我们自定义的组件。那我们就来看窥探一下这个类的基本设计。个人的理解他这样设计的好处是,组件的底层设计全部给我们做好了,我们只需要继承拿来使用就行了,如果需要修改就根据业务需求对组件进行简单的重写就可以快速进行业务逻辑的开发。和模版模式设计有异曲同工之妙。

BasicComponent(tigase-server-module中)继承类图

为了证明我说的只要继承BasicComponent的都叫做组件,我们可以看一下,tigase的核心类基本都是继承自BasicComponent组件。

tigase官方的架构图

tigase的核心类包括:

  • 连接管理器(ConnectionManager):用于处理客户端的各种连接
  • Session管理器(SessionManager):用于管理用户的连接的Session
  • 消息路由器(MessageRouter):用户处理消息各种路由转发等等操作
  • 集群连接管理器(ClusterConnectionManager):用于管理集群相关的连接
  • 群聊组件(MUCComponent): 用户群聊信息
  • 发布订阅组件(PubSub): 用于发布订阅相关功能实现
  • ...  

PS(因为tigase是多模块项目,就没有贴MUCComponnet等组件的继承图,但是都是继承了BasicComponent类的)

类图设计&继承关系

BasicComponent设计类图

由图可知,BasicComponent类集多功能于一身,其核心的功能定义是基于ServerComponent接口,定义关于核心的数据包处理,初始化,初始化完成,获取组件信息。其他的接口就接口隔离原则,提供BasicComponent的功能包括:

  • ClusteredComponentIfc接口:提供集群的控制器和断连,连接的处理方法
  • XMPPService接口:提供服务发现相关的功能定义
  • VHostListener接口:提供域名监听相关的功能的定义,包括设置域名管理器等等
  • ConfigurationChangedAware接口:提供监听配置动态修改的功能
  • Initializable接口:提供组件可初始化相关的功能

小结

tigase高度组件化其实就是基于接口隔离原则,将每个组件都需要的功能在BasicComponent类上面实现,如果其他人需要自定义实现组件的话,直接继承BasicComponent类即可。这就是tigase的组件化思想。

http://www.xdnf.cn/news/593.html

相关文章:

  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月20日第58弹
  • 智能体团队 (Agent Team)
  • 考研系列-计算机网络-第三章、数据链路层
  • Linux:网络基础
  • 深入理解 Transformer:原理、架构与注意力机制全景图解
  • 微信怎么绑定孩子的医保卡
  • w299基于Java的家政服务平台设计与实现
  • idea中运行groovy程序报错
  • FISCO 2.0 安装部署WeBASE与区块链浏览器(环境搭建)
  • 【Linux学习笔记】Linux的环境变量和命令行参数
  • 【支付】支付宝支付
  • FastAPI:现代高性能Python Web框架的技术解析与实践指南
  • 【刷题Day21】TCP(浅)
  • Java枚举
  • 排序算法-快速排序
  • 【数据结构 · 初阶】- 带环链表
  • Spring Boot 集成Poi-tl实现动态Word文档生成
  • pnpm确认全局下载安装了还是显示cnpm不是内部或外部命令,也不是可运行的程序
  • Windows 中使用 `netstat` 命令查看端口占用
  • shell 正则表达式与文本处理器
  • C语言之高校学生信息快速查询系统的实现
  • mysql——基础知识
  • 百级Function架构集成DeepSeek实践:Go语言超大规模AI工具系统设计
  • 深入解析主流数据库体系架构:从关系型到云原生
  • LeetCode第158题_用Read4读取N个字符 II
  • HTML 如何改变字体颜色?深入解析与实践指南
  • 大数据学习栈记——MapReduce技术
  • 在 Anaconda 上安装多版本 Python 解释器并在 PyCharm 中配置
  • Pandas的应用
  • OpenCV 找出两个图像之间的差异 cv2.absdiff