聊天中的消息已读实现方案


以钉钉为例,钉钉产品的定位是商业和办公,钉钉是实现了已读功能的,微信是生活方面的产品,所以并没有实现已读功能


已读功能在读扩散和写扩散实现的方式是不同的

写扩散情况下实现已读功能

我们数据库中存在很多消息的索引数据,我们可以给每条索引数据加上一个已读字段,当我们进入到聊天界面的时候,我们可以将已读的messagekey上报给服务端,服务端根据messagekey修改对应消息的已读状态

读扩散的情况下实现已读功能

1. 我们用一个值来记录群成员读到了哪条信息,比如说群中聊天记录最后一个的seq是100,我们群成员进入到群中的时候就将最后一条信息的seq记录下来,这个用户读到了100这个消息,100以前的消息都算已读,
2. 将seq跟我们的会话绑定,会话就标识聊天框,不同聊天框有不同的会话,不同的会话的seq也不相同,当我们已读消息的seq我们就修改会话的seq值,这样虽然没有写扩散精准但是也满足了大部分需求‘

已读功能怎么实现的?

我们的系统定位如果是社交娱乐,我们使用的是一张会话表,我们用这个表来记录用户与用户之间已读的消息偏序,对于在线的用户我们可以把消息投递给对方,告诉对方我已经已读了,如果是不在线的用户,下一次上线的时候,也可以根据这张表的数据拉取到是不是已读,已读到哪一条消息

但如果是特殊情况,比如是钉钉,钉钉这种办公和商务的需求我们可以使用写扩散,记录每一个用户对应消息的已读状态,我们想要拉取某一条消息的已读详情时,根据消息id+群id就可以获取到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值