1. 引出主题
IM整体涉及的内容比较多, 做技术方案设计需要慎重, 可以先从功能列表以及核心case逐步的总结出技术方案
本文Agenda:
1. 查看功能列表
2. 核心case分析
3. 总结技术方案设计
适合阅读的对象:
1. 想要入门IM
2. 想要了解IM的方案设计是如何得出的
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, 未读数提醒类型), 会话删除等.
我们以新创建会话 和 会话的属性变更两个为例.
打开会话
会话属性变更
以会话提醒类型更改为例