群聊已经成为主流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)所有数据信息,例如群成员、群离线消息抽象存储在db里。即时通讯开发
典型群消息投递流程
步骤1:群消息发送者x向server发出群消息;
步骤2:ser

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

被折叠的 条评论
为什么被折叠?



