im即时通讯开发:群聊消息如此复杂,如何保证不丢不重

本文探讨了群聊消息的投递和拉取流程,包括在线用户实时接收和离线用户后续获取。通过引入群消息表减少存储冗余,并采用应用层ACK确保消息到达。此外,优化离线消息表,仅存储最后一条拉取消息的时间或ID,以减少数据库记录数。最后,提出了ACK请求量的问题。
摘要由CSDN通过智能技术生成

群聊已经成为主流IM软件的基本功能,不管是QQ群、还是微信群,一个群友在群内发了一条消息,那么对于IM服务器来说需要保证:

在线的群友能第一时间收到消息;

离线的群友能在登陆后收到消息。

 

常见的群消息流程

开始讲群消息投递流程之前,先介绍两个群业务的核心数据结构:

群成员表:用来描述一个群里有多少成员

t_group_users(group_id, user_id)

群离线消息表:用来描述一个群成员的离线消息

t_offine_msgs(user_id, group_id, sender_id,time, msg_id, msg_detail)

业务场景举例:

1)一个群中有x,A,B,C,D共5个成员,成员x发了一个消息;

2)成员A与B在线,期望实时收到消息;

3)成员C与D离线,期望未来拉取到离线消息。

系统架构简介:

1)客户端:x,A,B,C,D共5个客户端用户;

2)服务端:

2.1)所有模块与服务抽象为server;

2.2)所有用户在线状态抽象存储在高可用cache里;

2.3)所有数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值