教你微信IM即时消息系统的架构设计(上)

简介: IM系统组成用户账号聊天的参与需要用户,所以需要有一个用户账号,用来给用户提供唯一标识,以及头像、昵称等可供设置的选项账号关系账号之间通过某些方式(比如加好友、互关等)构成账号间关系网联系人列表你的好友列表或聊天对象的列表。其中你可选择一个联系人进行聊天互动等操作消息在聊天互动这个环节产生了消息聊天会话你和对方的聊天消息记录就组成了一个聊天会话,在会话里能看到你们之间所有的互动消息

1 用户视图的IM

IM系统组成

  • 用户账号
    聊天的参与需要用户,所以需要有一个用户账号,用来给用户提供唯一标识,以及头像、昵称等可供设置的选项
  • 账号关系
    账号之间通过某些方式(比如加好友、互关等)构成账号间关系网
  • 联系人列表
    你的好友列表或聊天对象的列表。其中你可选择一个联系人进行聊天互动等操作
  • 消息
    在聊天互动这个环节产生了消息
  • 聊天会话
    你和对方的聊天消息记录就组成了一个聊天会话,在会话里能看到你们之间所有的互动消息

2 研发视图的IM

2.1 组成

客户端

用户收发消息的终端,内置的客户端程序和服务端进行网络通信,用来承载用户的互动请求和消息接收功能。

接入服务

为客户端提供消息收发的出入口,即网关层服务。

接入层避免业务可使用统一协议的header,body部分直接透传二进制,或把body的编码分委托给其他的编解码api。另外对于protobuf还不够紧凑的问题可以再gzip一下后再下推客户端。

发送的消息先由客户端通过网络给到接入服务,然后再由接入服务递交到业务层进行处理。

接入服务的功能:

保持连接

消息推送

当服务端有消息需要推送给客户端时,也是将经过业务层处理的消息先递交给接入层,再由接入层通过网络发送到客户端。

协议的编解码

编解码实际主要是为了节省网络流量,系统会针对传输的内容进行紧凑的编码(比如Protobuf),为了让业务处理时不需要关心这些业务无关的编解码工作,一般由接入层来处理。

session维护

session的作用是标识“哪个用户在哪个TCP连接”,用于后续的消息推送能够知道,如何找到接收人对应的连接来发送。

接入服务还负责最终消息的推送执行,即通过网络连接把最终的消息从服务器传输送达到用户设备。

业务处理服务

消息业务逻辑处理,比如消息的存储、未读数变更、更新最近联系人等。

存储服务

账号信息、联系人关系链,以及消息本身,都需服务端存储持久化存储。还有一些用户消息相关的设置,比如:用户可以设置不接收某些人的消息,还有附件。


服务端可以只是维护一个用于暂存消息和信令的离线buffer,至于存多久和产品需求以及监管需求相关。


即时消息可以放到MQ中,或者缓存中,使用数据抽取工具周期性的将数据提交服务器,进行持久化。服务器存储历史数据和近实时的数据。其实就是通过 MQ来异步化解耦消息存储逻辑。

作用

  • 会话一方用户不在线,上线时进行消息推送
  • 内容审查,监管,电子证据,法律要求
  • 数据分析,舆情分析

目录
相关文章
|
10月前
|
网络协议 NoSQL API
转转客服IM系统的WebSocket集群架构设计和部署方案
客服IM系统是转转自研的在线客服系统,是用户和转转客服沟通的重要工具,主要包括机器人客服、人工客服、会话分配、技能组管理等功能。在这套系统中,我们使用了很多开源框架和中间件,今天讲一下客服IM系统中WebSocket集群的的实践和应用。
663 141
|
9月前
|
小程序 Java 关系型数据库
基于微信小程序的智慧养老服务系统
本系统基于Java、MySQL和Spring Boot技术,构建高效、安全的养老院管理系统,提升信息处理速度与管理规范性,实现数据自动化备份与网络化管理,助力养老机构信息化升级。
|
9月前
|
JavaScript 小程序 Java
基于微信小程序的线上博物馆系统
线上博物馆系统利用互联网与数字技术,实现文化遗产的数字化保护与传播,打破时空限制,推动文化传承与教育创新。结合Java、Vue及Uniapp等技术,构建跨平台、高互动的在线展览平台,提升公众文化体验。
|
11月前
|
缓存 小程序 开发工具
最新原创uniapp+vue3仿微信界面聊天app系统
最新原创研发uniapp+vue3实战跨端仿微信App界面聊天程序。支持运行到H5+小程序+APP端。
455 6
最新原创uniapp+vue3仿微信界面聊天app系统
|
11月前
|
数据安全/隐私保护 容器 Go
开源IM即时通讯系统调研
Lumen IM 是一款企业级开源即时通讯工具,前端采用 Vue3 + Naive UI,后端基于 Go 语言,使用 WebSocket 协议。支持 Docker + Nginx 快速部署,适合私有化环境。功能包括文本、图片、文件消息,内置笔记、群聊及消息历史记录。界面美观、功能完善,适用于企业沟通、团队协作及开发者学习。提供前后端源码,便于快速搭建 IM 系统。
开源IM即时通讯系统调研
|
11月前
|
移动开发 网络协议 小程序
鸿蒙NEXT即时通讯/IM系统RinbowTalk v2.4版发布,基于MobileIMSDK框架、ArkTS编写
RainbowTalk是一套基于开源即时通讯讯IM框架 MobileIMSDK 的产品级鸿蒙NEXT端IM系统。纯ArkTS编写、全新开发,没有套壳、也没走捷径,每一行代码都够“纯血”。与姊妹产品RainbowChat和RainbowChat-Web 技术同源,历经考验。
408 1
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
从0搭建AI智能客服教程(AI智能客服系统选型和实战指南)
针对智能客服技术与业务脱节的痛点,合力亿捷通过 NLP、知识图谱及人机协同策略,助企业实现首次解决率超 70%、人力成本降 43%、年省成本超千万。其方案提升制造业问题解决率 40%,投诉转接成功率达 99%,以分场景选型助力超万家企业平衡业务与成本,成行业首选。
|
12月前
|
移动开发 缓存 前端开发
可二次开发的在线客服系统-前后端混合渲染模式
服务端渲染(SSR)结合API交互,提升首屏加载速度与SEO友好性,适用于混合渲染模式的Web应用。
215 0
|
12月前
|
Kubernetes Go 数据库
客服系统命令行程序-Cobra 命令行应用入口
唯一客服系统是基于 Go 语言与 Cobra 框架构建的命令行工具,用于管理在线客服系统。支持启动、安装和停止服务,具备清晰的命令结构和良好的扩展性,便于维护与功能拓展。
278 0