群聊已经成为主流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)所有数