IM客户端架构设计

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 一些关于IM客户端架构的总结

前言

我目前负责一个办公类App开发,为用户提供在线聊天,音视频通话,文件传输,以及办公小程序容器等功能,同时还提供PC、Pad、Phone三个平台设备客户端。RD们需要提供的能力有:IM基础通讯,IM消息端对端加密,OSS文件存储与上传下载管理,用户权限控制等等功能。

从功能复杂度上看,这将是一个大型的开发项目,所以架构设计将对项目的迭代非常重要,不论是业务功能的可维护性还是在模块的低耦合都是架构设计需要考虑的。

架构大纲

kCO5Dk-202102071042211612665741

主业务模块

主业务模块,从名字上可以看出是一个偏向业务定制的模块。

这个模块中页面或者功能在设计时更多考虑的是业务快速实现。例如:注册登录界面,用户详情展示页,第三方库的封装配置,通用模块的注册与配置。

当某个功能经过迭代成长,具有一定的通用业务能力时,会从主业务模块中拆分出来,封装成单独模块供其他业务使用。例如:用户的权限管理,网络时钟工具,HTTP连接管理模块。

IM模块

作为一个办公类IM App,IM模块是最重要的一个模块。这个模块从功能上,分为通讯数据管理与UI展示两个部分。

UI展示的功能有:聊天会话列表,聊天会话的定制化(输入控制面板,气泡样式定制等),音视频通话界面等。

通讯数据管理的功能有:IM的连接状态管理,IM的消息收发管理,信令管理,数据库管理等。

OSS与文件管理模块

源于IM模块,为IM提供文件传输的功能。由于OSS上传下载以及本地文件管理有着很强的通用性,于是对这个模块进行了单独分装。

这个模块提供本地文件存储,下载进度管理,断点续传,分片上传等OSS功能。

端对端加密能力模块

通过DH、AES、RSA等加密算法,提供两个设备端之间可以通过公私钥交换搭建安全信道的协议。同时需要实现证书结构,与后台CA共同维护设备证书。

这模块属于专业功能,封装了整套端对端加密的算法实现。

身份与权限模块

源于主业务模块,维护用户的鉴权信息,如token有效性,用户的基础信息等。同时也维护服务端下发的用户权限配置,实现客户端用户权限管理。

App业务配置模块

管理通用模块的注册逻辑,提供优先级管理,自动注册等功能。

搜索模块

负责如首页搜索,全局或局部的数据搜索业务。

注册和管理不同模块的搜索能力,方便在不同的模块中使用搜索功能。

需要注意的是搜索API需要异步实现,并且当出现高并发时需要取消失效的搜索任务,只匹配最新的搜索条件。比如用户开始搜索,在第一次搜索结果未返回时,用户又连续搜索了4次,如果不做处理,则会生成5个搜索结果,而其中的2,3,4其实是无效的搜索条件,当第1次搜索结束后,可以直接进行第5次搜索的匹配。

Hybrid容器模块

为H5提供Native的能力支持,发展小程序业务,利用H5迭代更快,实时接入的优点来为App赋能。

提供Native与JS的通信能力,提供与JS异步/同步通信的API,对Native函数与JS函数实现注册管理。

基础能力模块

日志管理模块

​ 提供日志文件管理、上传管理、日志等级管理等功能。

基础功能模块

​ 提供工具类,系统类方法扩展等。

网络模块

​ HTTP网络管理,请求/响应插件管理。

​ TCP网络管理,粘包/解包处理。

埋点模块

​ 根据业务配置表来管理客户端的埋点,管理数据上报逻辑,也负责预处理上报数据。

路由模块

​ 提供配置注册功能,可由服务端下发路由配置。

​ 提供App外部(如通知、网页)通过URL跳转App页面能力。

​ 提供App内部通过URL跳转页面,或者执行预设函数的能力,解耦模块。

目录
相关文章
|
3月前
|
数据采集 监控 测试技术
大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路
本文以iOS端为例,详细分享了手 Q 客户端性能防劣化系统从0到1的构建之路,相信对业界和IM开发者们都有较高的借鉴意义。
127 2
|
29天前
|
机器学习/深度学习 自然语言处理 搜索推荐
大厂 10Wqps智能客服平台,如何实现架构演进?
40岁老架构师尼恩,凭借深厚的架构功力,指导众多小伙伴成功转型大模型架构师,实现职业逆袭。尼恩的《LLM大模型学习圣经》系列PDF,从基础理论到实战应用,全面覆盖大模型技术,助力读者成为大模型领域的专家。该系列包括《从0到1吃透Transformer技术底座》《从0到1吃透大模型的基础实操》《从0到1吃透大模型的顶级架构》等,内容详实,适合不同水平的读者学习。此外,尼恩还分享了多个智能客服平台的实际案例,展示了大模型在不同场景中的应用,为读者提供了宝贵的实践经验。更多技术资料和指导,请关注尼恩的《技术自由圈》公众号。
大厂 10Wqps智能客服平台,如何实现架构演进?
|
1月前
|
存储 安全 开发工具
百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文主要介绍了百度公共IM系统的Andriod端IM SDK的建设背景、IM SDK主要结构和工作流程以及建设过程遇到的问题和解决方案。
53 3
|
28天前
|
消息中间件 网络协议 NoSQL
1000W长连接,如何建立和维护?千万用户IM 架构设计
最近有小伙伴在面试 美团,又遇到了 IM 架构问题。小伙伴支支吾吾的说了几句,面试挂了。 所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,**让面试官爱到 “不能自已、口水直流”**,然后实现”offer直提”
|
1月前
|
存储 网络协议 Unix
docker的底层原理一:客户端-服务器架构
本文详细解释了Docker的客户端-服务器架构,包括常驻后台的Docker守护进程、通过命令行接口发送请求的Docker客户端、以及它们之间通过Unix socket或网络接口进行的通信。
19 0
|
3月前
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
762 2
|
6月前
|
缓存 微服务
01.【微服务架构】服务注册与发现:AP和CP,你选哪个? -- 客户端容错
【5月更文挑战第12天】客户端容错机制确保在服务端或注册中心故障时仍能正确发送请求。当服务端崩溃,由于延迟,客户端一段时间内仍会尝试发送请求。客户端应实施 failover 策略,即检测到调用失败后,切换到其他节点重试,并将故障节点从列表移除。延时通常等于服务端与注册中心心跳间隔加通知时间。若网络问题导致客户端无法访问服务端,客户端应发送心跳以检测服务端状态,成功则恢复,连续失败则视为崩溃。若客户端无法连接注册中心,它应使用本地缓存并考虑退出。
76 1
01.【微服务架构】服务注册与发现:AP和CP,你选哪个? -- 客户端容错
|
5月前
|
前端开发 JavaScript 定位技术
高德客户端及引擎技术架构演进与思考
高德客户端及引擎技术架构演进与思考
|
6月前
|
存储 算法 安全
微信团队分享:来看看微信十年前的IM消息收发架构,你做到了吗
好的架构是迭代出来的,却也少不了良好的设计,本文将带大家回顾微信背后最初的也是最核心的IM消息收发技术架构,愿各位读者能从中获得启发。
229 1
|
6月前
|
存储 NoSQL Redis
陌陌技术分享:陌陌IM在后端KV缓存架构上的技术实践
在本文中,陌陌数据库负责人冀浩东将聚焦探讨陌陌的 KV 系统架构选型思路,深入解析如何进行此类系统的甄选决策,同时进一步分享陌陌团队在采用 OceanBase(OBKV)过程中所经历的探索与实践经验。
144 0