默认
发表评论 3
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
如何利用融云 IMLib 来实现一个阅后即焚功能
阅读(15181) | 评论(3 收藏 淘帖
场景
项目需要在私聊中来实现一个阅后即焚的功能,即 A 用户给 B 用户发送消息,B 用户在进入聊天页面查看之后 A 用户删除此消息,B 用户开始进入倒计时,倒计时结束后,删除此消息。
思考
  • 大体的梳理一下具体的逻辑

    • A -> B
    • B 进入会话页面
    • B 将此消息开始倒计时
    • 通知 A 我已进行阅读
    • A 删除消息

  • 从上面内容我们来大体的设计一下我们需要用户的技术

    • 单例类
    • 自定义消息,用来告诉 A 我已经开始阅读了,你删除吧
    • 一个用于维护阅后即焚消息的管理类
    • 一个存储 A 给 B 发送的所有的阅后即焚的消息的容器 A <k,              v> k 为 targetid ,v 为 messageIDs
    • 一个存储每条阅后即焚消息的容器 B <k,v> k 为 messageId, v 为当前消息还剩的倒计时时间。
    • 一个用来存储所有阅后即焚消息的容器 C K:ID   V:msg
    • 两个处理队列 一个处理时间 一个处理消息

  • 对外暴露接口

    • 代理 接收方焚烧消息的每秒倒计时
    • 通知 接收方收到对方已阅读某条消息的通知


详解
  • 初始化我们的所有容器
  • 收到消息,在合适的业务时机将此消息加入到焚烧队列
  • 查询消息是否已经在焚烧队列
  • 如果不在,添加到 A B C容器
  • 执行倒计时

倒计时操作
  • 遍历 C 是否有消息
  • 给发送方发送消息,通知我已经开始焚烧 A 里的消息了 并在 A 容器删除此会话
  • 发送方收到消息发送通知
  • 接收方遍历 B 容器,判断每条消息是否到时
  • 如果消息焚烧时间到 在 A、B 容器删除,并触发代理
  • 如果没到时间,就触发代理并修改 此消息在 B 容器的时长。


即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:如何隐藏融云输入框语音按钮下一篇:[学习资料] 稀缺的音视频资料
推荐方案
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部