当前位置: 首页 > news >正文

【开发经验】通知气泡实现思路

文章目录

    • 背景
    • 优化思路

背景

        在im即时通讯中、公告栏等功能中,有一个功能叫通知气泡,就是提示用户有多少消息未读,然后让用户点击之后,气泡消失。

在这里插入图片描述

        看似简单的功能,在设计起来很有讲究,因为,这种消息通知,肯定有私聊、广播、发送部分人等。简单的来设计,会设计出一个消息发送表。字段大概为,或者如果有群发、分组发、类型发时,可能要设计出两个表:

消息发送表:id、发送人、接收对象(群组id、类型id、userId)、接收类型(群组、类型、人)、发送时间

消息已读表:id、消息id、接收人、接收时间

        这种设计有个很明显的弊端,看似简单的一个功能 ,如果要过滤当前未读的数据,要先检索当前用户所属类型、群组下是否有未读消息,加上当前人是否有私聊消息。相对麻烦。

        并且,消息已读表中的数据,数量庞大,但是意义不大。

优化思路

根据发送时间来筛选气泡,去除消息已读表

每个用户附加一个拉取最后一条消息的时间,然后根据时间进行过滤。

image-20220830155822567

        如上图所示,每个用户记录当前用户接收到最后一个消息的id或者时间。如记录最后一个消息的时间。过滤时,只需要过滤发送给自己的,并且大于当前记录的消息时间即可。

        每次拉取最新消息之后,刷新用户最后接收的消息id或时间。

        注:此思路适合简单的消息通知,在如果是复杂的即时通讯功能,如钉钉中的消息已读功能实现,此思路仅可参考。

相关文章:

  • 机器学习损失函数
  • Set接口学习(2)
  • Windows下更改并使用NTP
  • Framework面试之(Binder)(Handler)脚踏大厂面试大赏
  • Redis的不同系统安装教程
  • 几种Set的比较
  • 使用 ECK 在 Kubernetes 集群中管理 Elastic Stack
  • 在Qt中使用MySQL
  • java---SPFA算法---最短路(4)(每日一道算法2022.8.30)
  • 2382. 删除操作后的最大子段和--(phase2--day3)
  • 时间复杂度计算题
  • 不愧是阿里内部“千亿级并发系统架构设计笔记”面面俱到,太全了
  • SpringCloud之配置中心
  • C++征途 --- Stack(栈)容器和Queue(队列)容器
  • Mysql 用户权限设置 细分数据库、表操作
  • $translatePartialLoader加载失败及解决方式
  • Android Volley源码解析
  • Facebook AccountKit 接入的坑点
  • IOS评论框不贴底(ios12新bug)
  • Java程序员幽默爆笑锦集
  • Laravel 中的一个后期静态绑定
  • React-redux的原理以及使用
  • React中的“虫洞”——Context
  • SpingCloudBus整合RabbitMQ
  • win10下安装mysql5.7
  • 从零开始在ubuntu上搭建node开发环境
  • 二维平面内的碰撞检测【一】
  • 关于使用markdown的方法(引自CSDN教程)
  • 警报:线上事故之CountDownLatch的威力
  • 利用jquery编写加法运算验证码
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端_面试
  • 强力优化Rancher k8s中国区的使用体验
  • 深入浏览器事件循环的本质
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 追踪解析 FutureTask 源码
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)获取字符编码的类
  • (二)Linux——Linux常用指令
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)LINQ之路
  • (转)ObjectiveC 深浅拷贝学习
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .Mobi域名介绍
  • .net CHARTING图表控件下载地址
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core 中的路径问题
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)