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, 未读数提醒类型), 会话删除等.
我们以新创建会话 和 会话的属性变更两个为例.
打开会话
会话属性变更
以会话提醒类型更改为例