基于Django Channels的聊天应用如何实现消息已读/未读状态
Django Channels聊天应用消息已读/未读状态实现方案
我在基于Django Channels开发聊天应用时,需要实现消息已读/未读状态的展示功能,过程中遇到了不少问题,最终找到了可行的解决方案:
最初的思路困境
- 一开始打算直接存储用户已读的消息ID,但这种方式会产生大量存储数据,显然不划算
- 后来想优化成存储(首次已读消息ID,最后已读消息ID)的元组,能大幅减少内存占用,但由于我的应用里聊天室和私信共用全局消息ID序列,没法区分不同会话的已读范围,这个方案没法落地
最终实现方案
我通过消息模型与用户模型的多对多(m2m)关联解决了问题:
- 创建消息时,将所有需要接收这条消息的用户添加到该消息的未读用户关联集合中
- 当用户读取消息后,移除该用户与这条消息的关联对象,此时这条消息对该用户就标记为已读
内容的提问来源于stack exchange,提问作者Natalia Kamysheva
相关产品推荐
相关产品推荐

