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

即时通讯:单聊消息逻辑

在线消息(对方在线)

1.client发送消息到msg_server

2.msg_server判断消息有效性,每秒发送的消息不能超过限制,无误后转发给db_server

3.db_server判断为单聊

  • 查找对应的会话,不存在则创建两个会话(双方都有)
  • 获取关系id(两人唯一),不存在则创建
  • 获取会话消息id(个人唯一),会话消息id = 关系id_(用户id)
  • 将消息写入数据库,更新会话的update time
  • 增加对方未读消息计数
  • 将处理结果放入回复队列,通过事件循环回发给msg_server

4.msg_server收到回复后,回复ACK给发送方client,发送方会显示消息已发送,但其实此刻没有发送

5.msg_server向route_server查询接收方在线状态,不在线则结束,在线则继续

6.msg_server首先广播该消息到本server的其它client,再转发到route_server

7.route_server广播消息到所有msg_server

注:6和7保证将消息发送到 : 1.同账号不同端的client 2.不同账号的接收方

注:6和7的广播可以优化为 :先查找有没有目标接收方,再进行定向转发

在这里插入图片描述

db_server处理细节:

在这里插入图片描述

在这里插入图片描述

离线消息(对方不在线)

与在线消息相同,但只有其中1,2,3,4,5条逻辑

点击获取更多Linux C/C++开发学习资料

http://www.lryc.cn/news/463814.html

相关文章:

  • Libevent源码剖析之reactor
  • 分享一套SpringBoot+Vue民宿(预约)系统
  • Linux——应用软件的生命周期
  • 【Linux】exec系列函数详细介绍
  • ARINC 429总线协议
  • Qt解决槽函数中发送的信号的参数会变化带来的错误
  • C C++ 如何编写库级接口
  • 安装TDengine数据库3.3版本和TDengine数据库可视化管理工具
  • 详解CAS
  • 《环境感知方案:探索未来智能世界的关键技术》
  • Android 编译时出现Android resource linking failed.without required default value.
  • golang ws升级为wss
  • FFMPEG录屏(17)--- 使用 DwmRegisterThumbnail 捕获指定窗口图像数据
  • 点亮一个LED(51)
  • Flink窗口分配器WindowAssigner
  • 【Tinymce】富文本编辑器在vue项目中的使用;引入付费格式刷,上传视频、图片
  • Java实现简单的5阶m序列密钥生成
  • 013_django基于大数据的高血压人群分析系统2024_dcb7986h_055
  • OpenCV高级图形用户界面(21)暂停程序执行并等待用户按键输入函数waitKey()的使用
  • 其他css的用途
  • json路径 [‘a‘].b.c[0].d[‘1‘].f,具体代表什么意思
  • 等保测评:如何进行有效的安全合规性审查
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发二 : 18.04ubuntu安装,linux 下build ffmpeg 4.3 源码 并测试
  • 将两张图片的不同标记出来
  • HarmonyOS开发(State模型)
  • 在 WPF 中使用 OpenTK:从入门到进阶
  • 【最新华为OD机试E卷-支持在线评测】水仙花数(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • C# WinForm 用名字name字符串查找子控件
  • Ubuntu下安装并初始化Git同时添加SSH密钥
  • 好用的AI工具:探索智能生活的无限可能