Tigase开发笔记6:packet流转机制 -> 一条消息(packet)的请求和响应过程解析

2023-11-09

初看Tigase的packet内部流转机制一开始不是太明白。里面用到了较多的线程,代码不太看得懂。慢慢的通过一条消息的请求和响应的代码跟踪分析,搞清楚了消息流转的过程。

前言

本文使用Tigase Server version:7.0.2 进行的代码跟踪和分析。

使用工具:IntelliJ IDEA14.1.4

Tigase通过tigase.io包当中的代码读取网络中的字节数组,然后通过tigase.net包当中的类把字节数组转换为字符,最后通过tigase.xml包当中的XML解析器把这些字符转换成XML DOM对象。



图片流程说明

看tigase源码你会发现所有的tigase处理都是基于多线程,每个component都有自己的in和out处理线程,线程间的数据传输通过queue

总的流程大致就是:





文字流程说明

下面是请求和响应的步骤说明(只列出了关键的步骤)。

A. 从client到server的过程(请求-Request)
ClientConnectionManager和MessageRouter都间接或直接继承了AbstractMessageReceiver。
    
    
    
tigase.server.AbstractMessageReceiver – 它已经实现了四个接口:ServerComponent,MessageReceiver,Configurable和StatisticsContainer。
它通过自己的多个线程来管理内部数据队列,且能避免死锁
它使用事件驱动的方式来处理数据,当packet被发送到AbstractMessageReceiver实例的abstract void processPacket(Packet packet)方法时,就立即启动了packet的处理工作。当然你还是需要实现抽象类当中的抽象方法,如果你还希望输出packet数据(例如当它收到请求时还需要发送响应),可以调用boolean addOutPacket(Packet packet)方法。
a. XMPPIOService负责接收客户端报文并转换为对应的packet放入队列receivedPackets(相当于in_queues)中,而SocketThread负责创建ReadThreadWriteThread线程,
ResultsListener则是SocketThread的一个内部类。ResultsListener负责调度socketReadThread()和socketWriteThread(), Client2Server读取和写入数据包的IO操作主要由XMPPIOService来完成,XMPPIOService实例则在read和write线程中使用。

b. ClientConnectionManager则负责从XMPPIOService获取receivedPackets,并对收到的报文进行处理,并将处理后的报文放入MessageRouter的out_queues队列中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tigase开发笔记6:packet流转机制 -> 一条消息(packet)的请求和响应过程解析 的相关文章

随机推荐

  • Vue项目运行报错:Module build failed (from ./node_modules/babel-loader/lib/index.js)

    报错分析 今天在npm run serve运行Vue项目时 突然报出了一个依赖构建错误 Module build failed from node modules babel loader lib index js 报错原因是babel的版
  • linux三剑客sed之模式空间与保持空间

    pattern space 模式空间 and hold space 保持空间 H h G g x 模式空间 sed处理文本内容行的一个临时缓冲区 模式空间中的内容会主动打印到标准输出 并自动清空模式空间 保持空间 sed处理文本内容行的另一
  • 【Hexo themes】【闪烁之狐 Matery】【简】

    文章目录 1 Down 2 修改Hexo配置文件 3 预览 4 部署更新 Summary Reference 个性化 PS 上午在 Hexo themes找了一些主题 有的太简单 可以配置的功能少 有些太复杂 以up现有能力要调一会才能开通
  • 从JAVA转.NET

    走路 难免要过河 生活 难免要磕碰 最近由于公司业务调整 把我所在的部门 整体搬迁到另外一个部门 业务自然是要从头开始了 这 我也就忍了 反正业务嘛 对大家都是公平的 而且搞软件开发哪能同一个业务做一辈子啊 除了盖茨啊 郁闷的是 技术也要换
  • 前端基础4——jQuery

    文章目录 一 基本了解 1 1 导入jQuery库 1 2 基本语法 1 3 选择器 二 操作HTML 2 1 隐藏和显示元素 2 2 获取与设置内容 2 3 获取 设置和删除属性 2 4 添加元素 2 5 删除元素 2 6 设置CSS样式
  • 在centos7上安装在线vscode

    最近在二开datahub 而datahub比较适合在linux中部署 就打算使用线上开发工具code server 安装方法比较简单 直接执行脚本进行安装 curl fsSL https code server dev install sh
  • C++模板函数-无法解析的外部符号

    在网上 看到有类似的问题 经常是写一个头文件 如test h 里面这样写 ifndef TEST H define TEST H include using namespace std 给指针data分配height width的内存 te
  • C#连接SQL数据库

    一 连接数据库服务器 1 连接SQL服务器 以下面为例 这里我使用的是SQL Server 身份验证 也可使用windows 身份验证 账户信息如下 登录名 sa 密码 mima 输入时自动隐藏 建立好数据库和表 服务器名 HG66 MSS
  • JavaScript应用——手把手教你做一个页面化猜数字游戏

    一听到猜数字游戏 想必大家都不太陌生吧 是的没错 很多人都用C语言或者Java写过猜数字游戏小程序 博主也不例外 之前写过C语言版本的猜数字游戏 感兴趣的同学可以看看C语言版本猜数字游戏 本篇博客主要介绍如何用JavaScript实现一个页
  • Django配置文件介绍

    本文主要讲一下django的settings文件中各个配置的代表的含义 from pathlib import Path 项目根路径 BASE DIR Path file resolve parent parent 密钥 自动生成的 很复杂
  • 源代码:STM32 SPI “DMA”操作W25QXX(16/32/64/128)系列芯片代码详解

    系列文章目录 文章目录 系列文章目录 前言 一 SPI h 二 SPI c 1 SPI配置 2 DMA配置 3 w25q64 c 4 w25q64 h 五 main c 六 串口打印代码 七 输出结果 前言 框架 自己新建库文件夹 取名li
  • 力扣第一题两数之和 PHP方法

    有事没事 什么都尝试 慢慢积累 都能走很远 很早之前就开始了解算法 然后知道算法是一种很神奇的东西 主要的那种逻辑明白之后你会觉得很秀啊 而各种联系在一起解决实际问题 瞬间感觉算法真的有用 所有开始看力扣中的题目并且尝试去做吧 比较笨拙等写
  • app上线发布流程_上架app的流程,需要提供什么资料,找人代上架靠谱?

    本文转载自姑婆那些事儿APP 注册应用商店账号 申请应用商店上架是APP推广的第一步 这一步没做好 会延迟甚至耽误后续的工作 因此 做好上架工作尤为重要 今天姑婆根据我们自己APP上架的经验进行了整理 分享给大家 希望对大家有所帮助 一 安
  • mongodb显示:‘mongo‘不是内部或外部命令,也不是可运行的程序或批处理文件

    我们在安装完mongodb之后都需要去校验一下是否安装成功 一般都用 mongo 去查看我们的mongodb安装是否成功 正常情况是这样的 但是如果是出现 mongo 不是内部或外部命令 也不是可运行的程序或批处理文件 我们有两个方法去排查
  • 2023前端面试题及答案整理(Vue)

    watch 和 computed 区别 watch 是监听动作 computed 是计算属性 watch 没缓存 只要数据变化就执行 computed 有缓存 只在属性变化的时候才去计算 watch 可以执行异步操作 而 computed
  • 枚举子集复杂度 O(n^3) 证明

    困扰多年的问题 居然在学习离散数学后的一分钟内得到解决 形式化问题为 求满足 A B S A sube B sube S A B S 的有序对
  • 解读三大财务报表

    三张报表是一体化的报表 但在不同的报表里 概念之间有些差异 大家应该适应此情况 这是全球性的问题 三张报表实际上是站在两个不同的角度 实际上 两个体系 维度 描述了同样的经济活动 但它们各自描述经济活动的方式是不一样的
  • java 枚举数据字典_枚举值当数据字典使用

    public interface EnumType enum E TRANCALL AFTER SUBTRAN PROCESS AFTER SUBTRAN PROCESS afterSubtranProcess 子交易处理模板后 Commo
  • 磁盘使用率大于90% 磁盘inode使用率大于90%

    线上机器一直再报 磁盘使用率大于90 发现 var log 下边有个mail文件 很大就直接清理掉 gt mail 但是这个问题反复出现 感觉一个没有什么业务的机器怎么磁盘使用率那么大 就查了下mail日志文件的形成 ps 发现有好多sen
  • Tigase开发笔记6:packet流转机制 -> 一条消息(packet)的请求和响应过程解析

    初看Tigase的packet内部流转机制一开始不是太明白 里面用到了较多的线程 代码不太看得懂 慢慢的通过一条消息的请求和响应的代码跟踪分析 搞清楚了消息流转的过程 前言 本文使用Tigase Server version 7 0 2 进