IM消息设计

未读消息设计

当用户在线时

本地记录会话未读消息数,当消息发送后使其+1,当用户点开会话之后,向服务端发送更新请求,用客户端的最后一条消息更新lastRead。客户端本地计数清零。

当用户上线时

服务端先不直接查询所有消息记录,大部分时间用户不会查看一些无用群聊消息,所以服务端只查询count seq < lastRead的数量,以及最后一条消息内容,用于展示在会话列表上,本地记录这个数量作为未读消息数。当用户点开会话之后,再去拉取seq < lastRead的消息内容。并更新lastRead。

整体的模型

对于离线消息采用扩散写,一种极端的做法是,服务端保存会话的lastRead和isNotice状态,当用户离线之后,如果有消息发送,记录这个这个会话有离线消息也就是通知,用户上线根据所有会话的isNotice去判断是否需要拉取离线消息。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN的IM系统设计包括以下几个方面: 1. 架构设计IM系统的架构设计需要考虑高并发、高可用性和可扩展性。常见的架构模式包括单服务器模式、集群模式和分布式模式,根据需求选择合适的架构。 2. 数据存储:IM系统需要存储用户信息、消息记录等数据。常见的数据存储方案包括关系型数据库(如MySQL)、NoSQL数据库(如MongoDB、Redis)和分布式文件系统(如HDFS)等。 3. 消息传输:IM系统需要实现实时消息传输功能。可以使用WebSocket协议进行长连接通信,也可以使用短轮询或长轮询等技术实现消息的推送。 4. 安全性设计IM系统需要考虑数据传输的安全性,包括用户身份认证、消息加密等。可以使用SSL/TLS协议保证数据传输的安全性。 5. 扩展性设计IM系统需要支持大规模用户和高并发请求。可以采用分布式缓存、负载均衡等技术来提升系统的扩展性和性能。 6. 用户状态管理:IM系统需要管理用户的在线状态、好友关系等。可以使用在线/离线状态标识、心跳机制等来管理用户状态。 7. 消息历史记录:IM系统需要保存用户的消息历史记录,以便用户查询和回溯。可以使用数据库或文件系统来存储消息记录。 8. 实时通知:IM系统需要实现消息的实时通知功能,包括声音、震动、推送等方式。可以使用推送技术(如苹果的APNS、谷歌的FCM)来实现实时通知。 以上是一些常见的IM系统设计要点,具体的设计还需要根据具体需求和技术选型进行深入的设计和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值