即时通讯系列---如何下手做技术方案设计

news2024/11/14 1:31:33

1. 引出主题

IM整体涉及的内容比较多,  做技术方案设计需要慎重, 可以先从功能列表以及核心case逐步的总结出技术方案

本文结构: 

1. 查看功能列表

2. 核心case分析

3. 总结技术方案设计


2. 如何做技术方案设计

1. 查看功能列表

功能清单

一级分类

二级分类

三级分类

核心信息

用户管理

用户管理

注册

用户名+邮箱+密码

登录

普通登录

用户名+密码

邮箱+密码

忘记密码

好友管理

添加好友

陌生人搜索

邮箱/联系人ID

二维码

添加好友列表

手机联系人

最近添加的联系人

好友列表

用户Profile

个人Profile

好友Profile

陌生人Profile

好友查询

好友删除

IM

会话模块

最近会话

最近会话列表

单聊+群聊+公众号 按照时间排序

发起会话

删除会话

会话置顶/取消置顶

会话未读数

会话查询

单聊

创建单聊

单聊编辑

发起群聊

消息免打扰

查找聊天记录

清空聊天记录

举报/投诉

群聊

创建群聊

群编辑

成员编辑

群聊名称

群公告

群管理

查找聊天记录

群置顶

保存到通讯录

公众号

消息模块

消息类型

文本消息

语音消息

视频消息

文本翻译

机器人消息

系统消息

消息推送

推送消息展示

消息管理

消息搜索

消息搜索

单条消息操作

消息发送

消息删除

消息撤回

消息复制

消息转发

观测

系统可观测

业务漏斗

监控报警

问题排查

行为链路监测

从上图中, 我们可以总结出, 这个产品整体是包含了三部分的内容

1.  用户管理(包含登录App的用户个人+用户好友)

2.  IM(会话+消息)

3. 系统可观测

2. 关键Case分析

问题的关键是要解决关键的问题

用户管理是一个比较老生常谈的话题, 可以先忽略. 可观测是技术内部的事情. 核心的是IM中的case. IM中比较重要的是消息的发送, 消息的接收, 以及会话的变更.

1. 消息的发送

分为几个步骤:

由于消息存在发送失败的可能, 站在用户的视角, 消息发送失败后, 是要能够重新发送的.

因而消息的发送, 分为以下几个步骤:

以普通的文本为例:

1. 用户输入信息

2. 消息本地入库, 设置为发送中.

3. 消息上屏.

4. 消息接口发送.

5. 消息发送状态变化.

如果是视频类等需要本地预处理的消息:

1. 用户选择文件

2. 消息本地入库, 设置为发送中

3. 消息上屏

4. 消息中的文件预处理(文件压缩 + 文件上传)

5. 本地消息更新

6. 消息发送

7. 消息发送状态变化

消息发送的图示如下

消息重发的图示如下

 

2. 消息的接收

消息的接收分为如下几个大的步骤

1. 客户端收到消息(主动拉取/被动接收)

2. 客户端检查消息的有效性

3. 消息入db库+进入到内存

4. 消息上屏

3. 会话的变更

会话变更的种类比较多, 如新创建了会话, 会话的属性更新(lastMsg, 未读数提醒类型), 会话删除等.

我们以新创建会话 和 会话的属性变更两个为例.

打开会话

会话属性变更

以会话提醒类型更改为例

4. 从核心case得出的IM的架构设计总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP/UDP网络编程

目录 一、常见的客户端服务端模型 二、Socket套接字 1、概念 2、分类 a、流套接字 b、数据报套接字 c、原始套接字 三、UDP数据报套接字编程 四、TCP数据报套接字编程 一、常见的客户端服务端模型 客户端:用户使用的程序。 服务端:给用户提…

miracl编译及使用

文章目录Windows平台编译网址 https://miracl.com/https://github.com/miracl/MIRACL Windows平台编译 源码目录下新建文件夹ms32或ms64,把/lib/ms32doit.bat或ms64doit.bat分别拷进去。 把源码include和source目录所有文件拷贝进要编译的ms32或ms64&#xff0c…

【高阶数据结构】海量数据如何处理? (位图 布隆过滤器)

🌈欢迎来到高阶数据结构专栏~~位图 & 布隆过滤器 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞&#xff0…

模拟实现list / list迭代器

前言:学习C的STL,我们不仅仅要求自己能够熟练地使用各种接口,我们还必须要求自己了解一下其底层的实现方法,这样可以帮助我们写出比较高效的代码程序! ⭐在本篇文章中,list的迭代器是重点,它不…

WSL2配置网络代理

注意:本文参考自文章:WSL2配置代理,是对原文的补充,使其适用于河对岸云服务代理。 1 开启Windows代理 1.1 开启代理软件的局域网访问权限 请注意:本文的WSL2代理配置,需要Windows的代理软件已经能够正常…

HTTPS详解及HTTPS实验

目录 HTTPS 一,https在参考模型中的位置 二,什么是HTTPS 三,什么是SSL 1,SSL 协议分为两层: 2,SSL 协议提供的服务: 四,HTTPS的加密方式 1,常见的加密算法 2,…

mysql知识点

目录 1.mysql聚合函数: 2.having(用来过滤数据): HAVING 不能单独使用,必须要跟 GROUP BY 一起使用 WHERE 与 HAVING 的对比 3.升序和降序 4.等于 5.实战demo: 1.mysql聚合函数: 常用的聚…

codeforces签到题之div3

前言 第一次codeforces,发现几个问题: 1,不知道选langua&…

17正交距阵和Gram-Schmidt正交化

标准正交向量与正交矩阵 上一节介绍过的正交向量,通过一个式子进行回顾,设q是标准正交向量组中的任意向量,则 这很好地表现了标准正交向量组内各向量的性质: 不同向量之间相互垂直(正交),向量…

Ribbon 负载均衡

介绍Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就…

屏幕录制软件推荐,分享这3款,简单好用

​网络上充斥着许多各种各样的屏幕录制软件,许多有选择困难的朋友可能会充满怀疑:哪个电脑屏幕录制软件很容易使用?屏幕录制软件推荐哪个比较好?别担心,今天,小编分享这这3个简单好用的屏幕录制软件&#x…

Day10 C++STL入门基础知识七——案例1【评委打分】

路漫漫其修远兮,吾将上下而求索 文章目录1. 承接上文1. 案例描述2. 实现思路3. 亿点点分析3.1 创建选手类3.1.1 具体思路3.1.2 代码展示3.2 创建5名选手并对其姓名、平均分进行初始化3.2.1 具体思路① 创建vector容器② 创建一个creatPlayer()函数a.调用函数b. 初始…

若依框架基于@PreAuthorize注解的权限控制

目录 一、Java注解(Annotation) 1. 概述 2. Annotation通用定义 (1)interface (2)Documented (3)Target(ElementType.TYPE) (4)Retention(Ret…

IDEA插件

Lombok用注解的方式,简化了 JavaBean 的编写。注解下面介绍一下常用的几个注解:Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。Getter 使用方法同上,区别在于生…

java基于ssm电梯服务管理信息系统的设计与实现源码+数据库

基于ssm电梯服务管理信息系统的设计与实现 技术支持 开发软件:Eclipse 项目类型:Webapp 数据库:MySQL 数据库连接池:druid 框架:SSM 数据库设计软件:PowerDesigner 前端界面开发:HTML/CSS…

Maven介绍

Maven介绍1、Maven的简单介绍2、Maven的优点3、Maven的基本知识3.1、Maven如何获取Jar包3.2、Maven仓库的分类4、Idea中的maven4.1、clean4.2、validate4.3、compile4.4、test(不常用)4.5、package4.6、verify(不常用)4.7、instal…

void*传数据,是不是像在黑洞里面拯救世界?

内核代码看到这样一个函数static inline void dev_set_drvdata(struct device *dev, void *data) {dev->driver_data data; }这个函数有什么用?看里面的代码含义大概就能知道,给 driver_data这个指针赋值,之后在其他地方就可以用这个指针…

《C语言高级》(二)------ 函数与指针 篇

目录 一、函数 1.1、创建和使用函数 1.2、全局变量与局部变量 1.3、函数的参数和返回 1.4、递归调用 1.5、斐波那契数列解法其三 1.6、汉诺塔 1.7、快速排序算法 二、指针 2.1、初识指针 2.2、指针与数组 2.3、多级指针 2.4、指针数组与数组指针 2.5、指针函数与函数指…

SpringCloud入门实战(五)-集成Ribbon

一、Ribbon简介 Spring Cloud Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单地说,就是在配置文件中列出Load Balancer(简称LB)后面所有…

python爬虫学习笔记-mongodb安装基本介绍pymongo使用

MongoDB数据存储 MongoDB是一个非关系型数据库(NoSQL). 非常适合超大数据集的存储, 由 C 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系…