当前位置: 首页 > 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.mrgr.cn/news/54092.html

相关文章:

  • 【Spring MVC】创建项目和建立请求连接
  • RHCSA复习题
  • 自动化工具:Ansible
  • Gitlab 完全卸载–亲测可行
  • 请解读下面的程序:pat =re.compile(r‘\d+‘)res = pat.search(‘www.ddd996.com‘)res.group()
  • RHEL: rpm2cpio: signature hdr data: BAD, no. of bytes(19987) out of range
  • 离线安装Kerbreos到Centos7
  • C# 字符串常用方法
  • 基于windows10的WSL详细安装与使用教程
  • Java项目实战II基于Spring Boot的毕业就业信息管理系统设计与实现(源码+数据库+文档)
  • C#中 is 和 as 运算符使用与区别
  • HTTP cookie 与 session
  • asyn queueRequest使用实例
  • ssm配置模式
  • 12.个人博客系统(Java项目基于spring和vue)
  • Java实现简单的5阶m序列密钥生成
  • java项目篇-用户脱敏展示
  • UDP协议揭秘:无连接通信的奥秘
  • C++远程过程调用框架:rpclib
  • 分布式追踪系统Jaeger
  • Bootstrapping、Bagging 和 Boosting
  • ●day 35 动态规划part01
  • MySQL知识点_03
  • LeetCode 2379.得到K个黑块的最少涂色次数
  • springboot036海滨体育馆管理系统的设计与实现(论文+源码)_kaic
  • 【进阶OpenCV】 (20) --疲劳检测