IM即时通讯-2-如何做技术方案设计
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, 未读数提醒类型), 会话删除等.
我们以新创建会话 和 会话的属性变更两个为例.
打开会话
会话属性变更
以会话提醒类型更改为例
4. 从核心case得出的IM的架构设计总结
IM即时通讯-2-如何做技术方案设计相关推荐
- 爱聊天(LoveChat)即时通讯聊天APP系统——技术架构
爱聊天(LoveChat)即时通讯聊天APP系统--技术架构 公司旗下第三代即时通讯产品 第一代:阿卡信 https://gitee.com/openzaly/akaxin-openzaly 第二代: ...
- 即时通讯开发----回音消除技术
在即时通讯应用中,需要进行双方,或是多方的实时语音交流,在要求较高的场合,通常都是采用外置音箱放音,这样必然会产生回音,即一方说话后,通过对方的音箱放音,然后又被对方的Mic采集到回传给自己(如下图所 ...
- IM即时通讯-6-已读回执的方案设计
背景-为什么展示已读未读 部分即时通讯软件会选择展示给用户已读未读, 主要是***快速感知对方的阅读状态, 感觉到自己受重视, 方便做下一步操作***. 如果要带点高度的讲,满足软件所代表的关键用户的 ...
- 技术玩法大升级,网易MCtalk揭秘5G即时通讯技术背后的秘密
目前短视频 .互动直播等音视频应用火爆,抖音,快手等已经成为当红流量入口,音视频技术有了长足的发展.随着社交的流行.玩法的增加,IM功能也成为众多App中必备功能之一.2019年伴随着5G.AI热度持 ...
- IM即时通讯-3-如何设计消息协议层方案
1. 前言 上篇即时通讯系列-如何下手做技术方案设计 最后总结出IM系统的端侧基本结构 后续文章将从下到上以此做架构设计. 本文Agenda 什么是消息同步 同步协议的常见设计方案包含哪些 应该采用哪 ...
- NanShan企业即时通讯开始写博客
原文:NanShan企业即时通讯开始写博客 这几年,我一直在写一个 即时通讯软件,软件写到一定程度,多少会有点空虚,终于下决心要开始写博客了,做程序员快六年了,六年的时间里,由一个嫩头青,成长为了一个 ...
- 开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构
本文属于OpenIM技术团队原创,转载请注明出处,谢谢 网上有很多关于IM的教程和技术博文,有亿级用户的IM架构,有各种浅谈原创自研IM架构,也有微信技术团队分享的技术文章,有些开发者想根据这些资料自 ...
- 2019年即时通讯局势为Magento用户带来的启示
我们综合了来自全球最具创新力的公司的34种产品,营销和CX领导者,将对2019年的即时通讯业务状况做一个全面分析.这与在麦进斗等品牌电商平台上运营的商家们息息相关,通过各种社交软件施行分销传播已经是做 ...
- 即时通讯:IM即时通讯实现原理
即时通讯:IM即时通讯实现原理 IM技术概念 即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种 ...
最新文章
- pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移(1)、索引不移动,移动之后无值的赋值为NaN、将原数据列与偏移后的数据列相加生成新的数据列
- ZendStudio中,缺少gbk gb2312编码的解决办法
- Synchronize对String加锁
- git / 通过 ssh 与仓库通信
- 1.Python算法之枚举算法
- Vitis学习记录(三)
- 通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分
- Java:集合for高级循环遍历
- 2-6 基于SpringBoot的SpringSecurity环境快速搭建与验证
- 第六十期:华为:希望把VR/AR打造成下个智能手机产业
- 三菱a系列motion软体_通化三菱Q00JCPU
- 2021年游戏项目的十大编程语言:C++、Java、JavaScript、Python均在榜上
- 国科大学习资料--机器人学导论(张正涛)--2014年期末考试试卷(含答案)
- 江苏小高考计算机什么时候考,2021江苏小高考时间 什么时候考试
- 股票涨跌和买卖预测计算公式
- 什么是ColdFusion
- originPro2021(3)添加图例导出图片图例不完全
- 股票软件开发总体方案
- 【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系
- 怎么测试t470p性能软件,ThinkPad T470p 助力耐热极限测试圆满完成
热门文章
- 浅谈AppStore中的评分与评论
- 【原创】Powermill使用点滴-不断更新
- Hive学习(15)-Hive分析窗口函数(三)
- Linux Crond服务
- populate() isn‘t reentrant 不可重入
- 盘点:大数据7个最有趣的应用
- JDK9新API:List.of();Map.of();Set.of();
- 浅析Anycast技术
- 通过patch-package创建补丁修改node_modules依赖下的源码
- 银行卡收单业务____轧差