【需求缘起】

群聊是多人社交的基本诉求,不管是QQ群,还是微信群,一个群友在群内发了一条消息:

(1)在线的群友能第一时间收到消息

(2)离线的群友能在登陆后收到消息

由于“消息风暴扩散系数”的存在(概念详见《QQ状态同步究竟是推还是拉?》),群消息的复杂度要远高于单对单消息。群消息的实时性,可达性,离线消息是今天将要讨论的核心话题。

【常见的群消息流程】

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

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

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个成

收藏 打印