如何高效拉取,会不会丢?
:用来描述一个群成员的离线消息。 推,写扩散,存储群离线消息的过程如何?
画外音:如果要支持消息漫游,则可以省略步骤二。 此时,用户拉取离线消息的过程如何?
离线消息推,存在什么问题? 对于同一份群消息的内容,多个离线用户要存储很多份。假设群中有200个用户离线,离线消息则冗余了200份,这极大的增加了数据库的存储压力。 如何优化,减少消息冗余量? 为了减少离线消息的冗余度,增加一个群消息表,用来存储所有群消息的内容,离线消息表只存储用户的群离线消息msg_id,就能大大的降低数据库的冗余存储量外音:优化后只存储msg_id。 这样优化后,群消息的发送和存储要做一些升级:
相应的,拉取离线消息也要做对应的升级:
画外音:毕竟msg_detail只存储了一份,不能随便删。 上述过程,能保证离线消息的可达性么? 不能。 例如:server返回客户端离线消息之后,删除了离线消息,但客户端没有展现就奔溃了,离线消息就会丢失。 如何解决离线消息可达性呢? 很容易想到,通过ACK机制,server返回离线消息之后,不能立刻删除离线消息,而必须等客户端ACK,才能删除。 此时,离线消息拉取升级为:
画外音:增加了3和4两个步骤。 还有一个问题,一次有几十个群,每个群有几千条离线消息,共计几万条群离线消息,消息量过大怎么办? 当然不能一次性拉取,可以:
如果拉取了消息,却没来得及应用层ACK,会收到重复的消息么?
可以在客户端去重,对于重复的msg_id,对用户不展现,从而不影响用户体验 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |