关于消息未读和已读的学习
企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,该如何设计呢?每一条消息,已读未读详情其实就是一个0/1的标记而已,我们可以选择维护一个bitmap来实现。每个群的信息保存userid到自增mapid的**映射**,这样群成员每加入一个群里,就有mapid<->usreid的双向映射了。假如群里有5个成员ABCDE, 那就对应mapid 1-5,messageid对应的消息详情存储就可以设计成{ uint32_t maxid, uint8_t readbit[]}。如上面的案例就是{5, readbit[0] =bin(0000 0000)}; 就占用了5B(4+1)(4byte+8bit),A发消息,D已读消息时,就更新成{5,readbit[0]= bin(0000 1000)};其余4人都已读消息时,更新为{5, readbit[0]=bin(0001 1110)}。这是个粗略的方案,里面还有一些细节值得思考:1、退出的成员呢?比如C退出群,发消息时maxid还是5,已读+未读总人数应该是3(不包括发消息者本人),目前信息只有5个bit(0/1),识别不出来谁已经退出群聊了。2、退出群聊的成员如何处理?从GruopMetaInfo里面删除么?退出群聊成员重新加入又如何分配id呢? 2这个点,退出群聊的成员只能**逻辑删除**,不能物理删除,不然客户端展示已读未读详情时,通过mapid找不到对应的userid,退出的成员又重新加入群聊这个就好办了,把标记删除改成非标记删除,还是用旧的mapid。至于1呢?我目前想到比较好的方式就是再加多一个bitmap,记录成员在消息发送时是否已经退出群聊了,退出群聊就置为1,所以最终方案就是群信息增加userid,自增mapid双向映射,退出群聊成员标记删除,messageid已读未读详情存储 {maxid, readbit[], quitbit[]}新的方案带来怎样的收益呢?增加自增mapid字段,一个群聊维护一份,成本几乎可以忽略不计。每个成员已读未读由8B(64bit)优化成2bit,减少62/64, 200人已读未读旧的方案1600B, 现在只需要(200/8) * 2 + 4 = 54,每条消息节约95%+ 如果maxid如果到百万甚至千万级别,那岂不是灾难?一般实际场景,群聊是会限制人数的,就算不断踢人加新人,那maxid最多也只能到企业人数。如果maxid达到一个特别大数字,已读未读对应的存储可以增加多一个flag,如果bitmap存储成本远超过最初的方案,可以用最初的方案来实现,客户端提前埋好兼容逻辑就可以了。
关于消息未读和已读的学习相关推荐
- 微信的新消息一键标为已读.简单的微信脚本,使用autojs编写的安卓自动化脚本
说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...
- app里未读消息已读、未读是怎么设计的?
也不知道大家目前都用的java编程软件有哪些,毕竟在应用程序中,未读和已读消息的设计取决于应用程序的需求和目标.下面是一些常见的设计模式: 一.简单的未读/已读标记 简单的未读/已读标记:这是最常见的 ...
- 踩坑记录:消息推送已读未读
一.需求 最近工作中遇到了一个坑,在次记录一下. 社区管理员在后台发布一条社区公告,手机端该社区下的所有居民都可以收到这条公告,并且消息有已读未读状态. 二.分析 这个需求看起来很简单,无非就是后台发 ...
- android读信息会话,在融云 IMkit 会话界面基础上添加消息已读未读.
在融云 IMkit 会话界面基础上添加消息已读未读. 使用过融云的同学们可能知道. 融云 IMkit 的会话界面, 发送玩消息后, 如果对方已读, 发送端则会显示小对号的图片. 但是更具需求要把小对号 ...
- Web聊天室消息[已读未读]的实现
聊天室快速访问 继上次完成聊天室的历史记录功能后,我又想着实现聊天记录的已读未读功能.(轻喷..) 开始之前 首先我看了抖音和钉钉这两款应用的消息已读未读功能的呈现效果.首先是抖音,在聊天界面,给好友 ...
- od拦截消息 comboboxonchange_某聊天软件逆向之偷看消息不quot;已读quot;
文章来源:网友投稿 0x00 适用场景 本文所采用技术,仅用来实现自定义功能,适用场景仅为自己两台电脑使用聊天软件互发消息学习研究使用. *本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果 ...
- 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
本文作者潘唐磊,腾讯WXG(微信事业群)开发工程师,毕业于中山大学.内容有修订. 1.内容概述 本文总结了企业微信的IM消息系统架构设计,阐述了企业业务给IM架构设计带来的技术难点和挑战,以及技术方案 ...
- im即时通讯开发:消息模型、万人群、已读回执、消息撤回功能
企业微信作为一款办公协同的产品,聊天消息收发是最基础的功能.消息系统的稳定性.可靠性.安全性尤其重要. 消息系统的构建与设计的过程中,面临着较多的难点.而且针对toB场景的消息系统,需要支持更为复杂的 ...
- #即时通讯#实现消息已读回执功能的思路与实现
最近项目的聊天模块中增加了一个消息已读回执的功能,从技术上不是很难实现,但还是在这里记录一下,以便以后查阅. 所谓的消息已读回执,就是双方聊天时,如果对方看到了你新发的信息,这条消息在你这端就会标为& ...
最新文章
- JMX操作ActiveMQ(2)
- Esfog_UnityShader教程_前言
- outlook从服务器中恢复已删除项目,Exchange 恢复已删除项目
- Mybatis(三) 映射文件详解
- svn添加钩子hook
- 【Linux网络编程】并发服务器之多进程模型
- 【Linux】一步一步学Linux——tar命令(62)
- 计算机硬软件故障实训报告,计算机维护维修实训报告.docx
- 不同浏览器对URL最大长度的限制(转)
- (轉貼) 人人有功練!! 有功夫,沒懦夫 (News)
- 图书馆管理系统5W1H分析
- matlab几何形状面积计算,小学数学几何图形计算公式总结
- 2021-01-27
- 太阳直射点纬度计算公式_高中地理——每日精讲1题(地震、太阳高度角、极昼、昼夜长短)...
- 突然间电脑的复制粘贴不能用了???
- oracle dba_users,为什么dba_users里有的用户却总是select不出来
- 文献管理软件//Zotero的常用插件——Sci-hub/shortdoi批量下载、Zotfile重命名PDF文件及ZoteroQuickLook快速预览(二)
- android酷炫转圈动画,android常用旋转线条加载动画
- 基于随机森林的分类算法的matlab简单实现
- Win10 将D盘多余空间分配给C盘