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月前
|
存储 SQL 安全
什么是传统的客户端服务器模式架构
什么是传统的客户端服务器模式架构
|
11月前
|
消息中间件 缓存 测试技术
企业微信针对百万级组织架构的客户端性能优化实践
本文主要分享的是企业微信在百对百万级大规模组织架构(后文简称大架构)时,是如何对客户端进行性能优化过程的,希望带给你启发。
69 0
|
18天前
|
数据采集 监控 测试技术
大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路
本文以iOS端为例,详细分享了手 Q 客户端性能防劣化系统从0到1的构建之路,相信对业界和IM开发者们都有较高的借鉴意义。
47 2
|
5天前
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
25 2
|
3月前
|
缓存 微服务
01.【微服务架构】服务注册与发现:AP和CP,你选哪个? -- 客户端容错
【5月更文挑战第12天】客户端容错机制确保在服务端或注册中心故障时仍能正确发送请求。当服务端崩溃,由于延迟,客户端一段时间内仍会尝试发送请求。客户端应实施 failover 策略,即检测到调用失败后,切换到其他节点重试,并将故障节点从列表移除。延时通常等于服务端与注册中心心跳间隔加通知时间。若网络问题导致客户端无法访问服务端,客户端应发送心跳以检测服务端状态,成功则恢复,连续失败则视为崩溃。若客户端无法连接注册中心,它应使用本地缓存并考虑退出。
51 1
01.【微服务架构】服务注册与发现:AP和CP,你选哪个? -- 客户端容错
|
2月前
|
前端开发 JavaScript 定位技术
高德客户端及引擎技术架构演进与思考
高德客户端及引擎技术架构演进与思考
|
3月前
|
存储 算法 安全
微信团队分享:来看看微信十年前的IM消息收发架构,你做到了吗
好的架构是迭代出来的,却也少不了良好的设计,本文将带大家回顾微信背后最初的也是最核心的IM消息收发技术架构,愿各位读者能从中获得启发。
143 1
|
3月前
|
存储 NoSQL Redis
陌陌技术分享:陌陌IM在后端KV缓存架构上的技术实践
在本文中,陌陌数据库负责人冀浩东将聚焦探讨陌陌的 KV 系统架构选型思路,深入解析如何进行此类系统的甄选决策,同时进一步分享陌陌团队在采用 OceanBase(OBKV)过程中所经历的探索与实践经验。
84 0
|
3月前
|
消息中间件 缓存 开发工具
一套分布式IM即时通讯系统的技术选型和架构设计
为了更好的理解分布式IM即时通讯系统的设计,我站在架构师的角度,在充分了解系统需求、业务流程和技术流程后,从全局视角为系统设定方案目标,对技术方案进行选型,对系统进行总体架构设计和分层架构设计,并梳理清楚发送消息的交互链路、单聊和群聊的交互链路。希望对你有帮助。
360 0
|
9月前
|
XML Java 程序员
页游AS客户端架构设计历程记录
页游AS客户端架构设计历程记录
50 0

热门文章

最新文章