消息模型分为:
消息写扩散模型
消息读扩散模型
什么是消息写扩散模型?
以一个万人群举例,成员发布一条消息,这条消息需要存储到每个成员自己的消息队列里,也就是一条消息需要存储一万份。(典型代表:微信)
优点:
用户读取自己消息的逻辑非常简单
缺点:
存储压力大,不适合做大群
每次获取离线消息是获取完用户整个消息队列里的消息,如果消息过多,会导致获取离线消息很慢。
什么是消息读扩散模型?
以一个万人群举例,成员发布一条消息,这条消息只存储一份,如果有多个群,成员获取消息需要带上群的标识分别读取群内消息。
优点:
写逻辑简单,存储压力小,适合做大群
获取离线消息很快,因为只需要获取每个会话的最近几条即可
缺点:
读取复杂,需要分别读取各个群的消息。
WuKongIM的选择
普通消息读扩散
因为WuKongIM有大群的要求,所以毫无疑问只能选择读扩散。
针对于读复杂的问题,我们服务端为每个用户维护了最近会话列表(聊天列表),用户每次获取离线消息只需要采用增量同步最近会话列表即可,所以不管离线消息有多大,同步都非常快,当用户点击会话(消息列表)的时候再加载此会话的消息。
命令类型的消息使用写扩散
因为读扩散只是读取最近的几条消息,比如读取每个会话最近的10条消息,如果某个命令消息在某个会话的11条消息里,那么这条命令同步最近会话列表的时候就不会同步下来,会导致这条命令不会被执行,所以命令类型消息选择写扩散,写入到每个用户的消息队列里,当用户同步离线命令的时候就可以完全同步到命令,然后客户端可以完成命令的执行。
唐僧叨叨开源介绍:
唐僧叨叨是一款轻量级,高性能,重安全专注于私有化部署的开源即时通讯系统,由悟空IM提供底层通讯动力
唐僧叨叨:
Github:https://github.com/TangSengDaoDao/TangSengDaoDaoServer
Gitee:https://gitee.com/TangSengDaoDao/TangSengDaoDaoServer
悟空IM:
Github:https://github.com/WuKongIM/WuKongIM
Gitee:https://gitee.com/WuKongDev/WuKongIM
下一篇: 用Go打造现代IM之群聊单聊统一抽象