首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IM群聊消息已读未读功能在存储空间方面的实现思路探讨

1、引言 IM系统,特别是企业应用场景下,消息已读未读状态是一个强需求。 以阿里钉钉为例,钉钉产品定位是用于商务交流,其“强制已读回执”功能,职场人无法再“假装不在线”、“假装没收到”。...服务端需存储每个人阅读状态,包括那些未读成员。由于成员清单可能变化,比如今天增加了一个成员,则昨天发消息、与今天发消息,其接收者列表不一样。...因此,引出本文重点思想: 考虑不同消息共用成员列表,即把消息阅读状态成员列表分开存储,并记录它们之间关联。...那么这一千条消息阅读状态所占用空间是: 成员列表空间 + 1024条消息阅读状态:640 * 4 + 1024 * 每条消息阅读状态所占空间 具备成员列表前提下,如何减少每条消息阅读状态所占空间...当一条消息没有人已读时,阅读状态占用0字节;当每个人阅读时,占用空间最大,即640 / 32 = 20字节。

5.6K50

5大功能解锁神级办公效率,企业微信让你在老板前直起腰板

但很多时候,有些办公场景下需要功能太多元,并且得不到很好地解决,比如:群聊只有500人、传送文件大小有限制…… 事实上,企业微信里,一些你可能没注意到小功能,能很好地解决这些办公痛点。...企业微信里,支持发起最多2000人普通群聊以及最多10000人全员群聊。那么该公司所有新招聘员工都能在一个,有任何事情可在一个群聊进行汇报,省去不少纠结。...里人太多,群聊消息密集,员看不到群主发言怎么办?企业微信,群主可以设置内禁言,重点内容不被其他发言打乱。 2 工作产生电话费,企业掏钱 这年头,谁还没开过多人电话会议。...3 再也不怕“文件已清除”了 我们使用微信工作沟通,经常会在微信上接收文件,微信里文件只能保存7天,超过后微信系统会提示“文件已过期或已被清理”,如果是非常重要工作文件被清理,那会带来多少不便...这时我们经常说是:“好气,怎么不能多存几天!” 想多存几天?企业微信来满足你。管理员可在后台进行设置,员工群聊记录、文件、图片等消息可保存在云端,最长可设置为180天,超过后才会自动清空。

69350
您找到你想要的搜索结果了吗?
是的
没有找到

企业微信IM架构设计揭秘:消息模型、万人、已读回执、消息撤回等

6、整体架构设计3:消息扩散写 IM消息分发典型方式,一般有两种: 1)扩散读; 2)扩散写。 6.1 扩散读 即:每条消息只存一份,群聊成员读取同一份数据。 优点:节省存储容量。...例如信息变更,会下发控制消息通知成员,优先级低。 群聊人数,又分成3类: 1)普通:小于100人,优先级高; 2)大 :小于2000人,优先级; 3)万人:优先级低。...大群消息有一个常见规律:平时消息少,会突然活跃。例如:老板发个大红包,成员起哄,此时就会产生大量消息消息量上涨、并发度被限制、任务处理不过来,那么队列自然就会积压。...一条回执消息阅读状态会被频繁修改,消息被修改次数和成员人数成正比。每天上亿条消息,读写频繁,请求量巨大,怎么保证每条消息接受双方状态是一致是一个难点。...缺点: ① 存储冗余,状态变更多次,则需插入多条消息; ② 收发双方需要修改阅读状态(接收方需标志消息为已读状态),存在收发双方数据一致性问题。

2.5K23

揭秘企业微信如何优化满足ToB新挑战?

同一条消息每个人视角会有不同表现。例如,回执消息,发送方能看到已读未读列表,接受方只能看到是否已读状态。...优先级低 群聊人数,分成3类: 普通:小于100人,优先级高 大群:小于2000人,优先级 万人:优先级低 业务繁多,如果不加以隔离,那么其中一个业务波动有可能引起整个消息系统瘫痪...合并插入 工作场景聊天,多数是完成,大群用于管理员发通知或者老板发红包。 大群消息有一个常见规律,平时消息少,会突然活跃。例如,老板发个大红包,成员起哄,此时,就会产生大量消息。...二、回执消息设计与优化 回执消息是办公场景经常用到一个功能,能看到消息接受方阅读状态。一条消息阅读状态会被频繁修改,消息被修改次数和成员人数成正比。...每天上亿条消息,读写频繁,请求量巨大,怎么保证每条消息接受双方状态是一致是一个难点。 1. 回执消息实现方案 消息阅读状态存储方式两个方案。

1.3K20

移动端IM中大规模消息推送如何保证效率、实时性?

当然,实际在生产环境下,消息发送都会想尽办法进行压缩,并开展各种改善性能处理办法,而不是像上述举例直接扩散写(即2000人,一条消息被简单地复制为2000条一对一消息投递)。...《IM单聊和群聊在线状态同步应该用“推”还是“拉”?》 3、本文背景 公司IM第一版红包功能上线后,收集到不少问题。...核心问题是消息延迟,导致有些人先看到红包,有些人晚看到红包,同时导致消息顺序混乱。这是个典型群聊消息优化问题。 4、问题产生原因 先大致分析一下问题产生原因。...1)c2g模块没有采取批处理方式: 1条(500人消息到达c2g模块后,c2g模块为每个人写收件箱(这里时间延迟较大,优化点),然后把这条消息变成500条投递消息(需要批处理,就给Kafka放入一条消息...比如用户状态及路由表数据,采用hash算法分布几台服务器上。收到消息后,根据成员,计算出用户状态及路由表数据分布情况,从缓存服务器中一次检索出该服务器可能存在所有成员状态及路由信息。

1.5K10

程序员沟通和思考有多重要?

他通知消息是一个小,这几个 IR 策略负责人都不在的人都以为是其他人要负责跟进,所以没有响应,而同事 A 自己理解为:消息没有得到回复是正常,我已经通知到位。...某次五一长假,他通知五一值班安排,仅把消息贴到,并 @ 了多位负责人,但没有确认大家是否都回复,仅是企业微信“已读”,看到大家都已读,就认为大家通知到了。...举个例子:小 A 问小 B 一个问题,小 B 觉得这个问题不适合在沟通,于是私聊小 A 解答,这时候群聊记录就停留在小 A 提问题,而没有人解答。...对于沟通许久群聊,建议做总结陈述,一方面确保沟通者意见一致,另一方面也阅读者可以减少爬楼,提升效率。...我们邮件,首先看到是标题,点击之后才看到内容。这个告警标题无法阅读者快速得知是哪个业务有告警,我们服务了上百个业务,不同业务有不同关注人,每个告警需要点开之后才能看到是哪个业务,效率太低。

45355

如何用机器人监听老板微信?

---- 随着微信社交兴起,我们加入也越来越多,一个不经意就被拉入好几个是大家协同交流平台,但是微信却越来越泛滥,不知道大家有没有统计过自己浪费毫无营养时间? ?...2.老板有什么指示 公司大群,也许老板今天心情买了一些水果犒劳大家,然后说:前台有水果,结果等你看到消息时,前台只剩下妹子了。为什么吃零食总没有你份?...3.又要改需求 你好不容易实现了一个功能,结果产品验收不通过,产品经理说已经项目和你说了并且@了你,但是你沉醉于实现功能忘了。看来今晚又得加班改需求了,心好累怎么办? ?...这里我们可以接收到消息后比较下这个是不是我们需要监听,然后再比较当前消息发送者在不在我们要监听对象,如果两者满足便实现了消息过滤。...五、总结 目前微信机器人第二阶段开发完成,本次不仅仅新增监听模式,还新增了以下以下一些功能: 机器人群聊机器人加入群聊更多的人来撩~ 转发模式:可将老板重要指示转发至其他 监控模式:监控别人发分享

1.4K20

零基础IM开发入门(四):什么是IM系统消息时序一致性?

上面这个例子,说还只是单聊,如果是群聊,则问题可能还会被无限放大:试想一个技术交流,正在激烈争吵着“php是世界最好语言”这种话题时候,忽然就想砸手机了,不是因为吵太凶,而因为消息顺序全乱完全没法...那么:分布式环境下,客户端+服务端后台各种后台服务,各自分布不同机器上,机器之间都是使用本地时钟,没有一个所谓“全局时钟”(也没办法做到真正全局时钟),那么所谓消息时序也就没有真正意义上时序基准点...6.2 多对多群聊消息一致性保证思路 假设N个群友一个IM聊天,应该怎样保证所有员收到消息显示时序一致性呢?...从技术角度消息其实也不用保证全局消息序列有序,而只要保证一个消息有序即可,这样的话,“消息id序列化”就成了一个很好思路。...《一个低成本确保IM消息时序方法探讨》 《IM单聊和群聊在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》

1.1K21

程序员必须掌握高效沟通技巧

他通知消息是一个小,这几个 IR 策略负责人都不在的人都以为是其他人要负责跟进,所以没有响应,而同事 A 自己理解为:消息没有得到回复是正常,我已经通知到位。...某次五一长假,他通知五一值班安排,仅把消息贴到,并 @ 了多位负责人,但没有确认大家是否都回复,仅是企业微信“已读”,看到大家都已读,就认为大家通知到了。...举个例子:小 A 问小 B 一个问题,小 B 觉得这个问题不适合在沟通,于是私聊小 A 解答,这时候群聊记录就停留在小 A 提问题,而没有人解答。...对于沟通许久群聊,建议做总结陈述,一方面确保沟通者意见一致,另一方面也阅读者可以减少爬楼,提升效率。...我们邮件,首先看到是标题,点击之后才看到内容。这个告警标题无法阅读者快速得知是哪个业务有告警,我们服务了上百个业务,不同业务有不同关注人,每个告警需要点开之后才能看到是哪个业务,效率太低。

26522

IM群聊消息已读回执功能该怎么实现?

1、前言 我们平时使用即时通讯应用时候,每当发出一条聊天消息希望对方尽快看到,并尽快回复,但对方到底有没有真的看到?我却并不知道。...《IM单聊和群聊在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》...5、了解一下消息发送流程 核心数据结构设计完之后,一起来看看消息发送流程(本系列文章《IM群聊消息如此复杂,如何保证不丢不重?》详细讲解了这个过程,可以深入读一读)。...其整个消息发送流程1-4如上图: 1)A发出消息; 2)server收到消息后,一来要将消息落地,二来要查询有哪些成员,以便实施推送; 3)对于成员,查询在线状态; 4)对于在线成员,...接着,server收到消息后,除了要: 1)将消息落地; 2)查询有哪些成员,以便实施推送; 之外,还需要: 3)插入每条消息初始回执状态。 ?

4.8K20

一点思考|为什么建议开源社区技术交流使用邮件列表?

有一件事我印象很深刻:一次线下 meetup 抽奖时,前置条件需加入社群,有很多参与者就会“加——抽奖——没中奖——退”一套流程行云流水;加入群聊的人,抽奖过后选择默默潜水也不在少数。...,社群运营同学要哭晕厕所…… 话题稍微走远了点,我们回到开源社区技术交流来,诚然很多很多开源社区都在使用微信社群作为日常技术沟通交流主要方式,但是随着社群消息不断刷屏,以及群聊消息可折叠化...; 利用碎片化时间微信进行沟通,更容易人产生急躁感,有时一言不合和可能就会在争吵起来,虽然围观群众都很乐意吃瓜,但是过度争吵也会影响氛围和谐。...信息安全性: 这安全性指的是,订阅邮件列表每个人都会有一份信息副本,邮件列表每个字通过公开传播流程,形成永不丢失状态。...微信自然也有微信优点,比如在活动运营时候,微信互动可以快速大家参与进来,引发一波参与热潮。

46100

面试官:群聊消息已读未读功能,你来设计一个?

,发送者刚发出消息时,当前其他成员都是未读状态,陆陆续续有人看了这个消息,这时候消息详情变成x人已读,y人未读,如下图所示,有具体已读未读列表(万恶功能,看到同事or老板消息不能假装没看到了...usreid双向映射了,假如有5个成员ABCDE, 那就对应mapid 1-5,messageid对应消息详情存储就可以设计成 { uint32_t maxid, uint8_t readbit...比如C退出,发消息时maxid还是5,已读+未读总人数应该是3(不包括发消息者本人),目前信息只有5个bit(0/1),识别不出来谁已经退出群聊了 退出群聊成员如何处理?...我目前想到比较好方式就是再加多一个bitmap,记录成员消息发送时是否已经退出群聊了,退出群聊就置为1, 所以最终方案就是 信息增加userid,自增mapid双向映射,退出群聊成员标记删除,messageid...技术交流 最近有很多人问,有没有读者交流,想知道怎么加入。加入方式很简单,有兴趣同学,只需要点击下方卡片,回复“加“,即可免费加入我们高质量技术交流

1.5K40

IM群聊消息究竟是存1份(即扩散读)还是存多份(即扩散写)?

不过,从公开技术资料来看,微信群聊消息应该使用是存多份(即扩散写方式),详细方案可以微信团队分享这篇文章找到答案:《微信后台团队:微信后台异步消息队列优化升级实践分享》。...《IM单聊和群聊在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》...4、更多关于IM群聊文章 IM系统群聊功能,是个很大话题,下面几篇群聊文章您也可以读一读: 《如何保证IM实时消息“时序性”与“一致性”?》...《IM单聊和群聊在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》...发送消息流程优化为,如上图1-4: 1)发送消息; 2)所有人存一份; 3)查询状态; 4)在线实时推送。 先将消息落地,能够保证消息可达性,那何时才能删除已经落地消息呢?

1.6K20

消息这么复杂,怎么能做到不丢不重?

群聊是多人社交基本诉求,不管是QQ,还是微信,一个群友内发了一条消息: (1)在线群友能第一时间收到消息 (2)离线群友能在登陆后收到消息 由于“消息风暴扩散系数”存在(概念详见《QQ状态同步究竟是推还是拉...server (2.2)所有用户在线状态抽象存储高可用cache (2.3)所有数据信息,例如成员、离线消息抽象存储db ?...回答:会,可以客户端去重,对于重复msg_id,对用户不展现,从而不影响用户体验 (2)对于离线每一条消息,虽然只存储了msg_id,但是每个用户每一条离线消息都将在数据库中保存一条记录,有没有办法减少离线消息记录数呢...time(或者msg_id),下次登录时拉取在那之后所有消息即可,而完全没有必要存储每个人未拉取到离线消息msg_id 成员表:用来描述一个有多少成员,以及每个成员最后一条ack消息msg_id...500个应用层ACK,将对服务器造成巨大冲击,有没有办法减少ACK请求量呢?

1.6K70

群聊比单聊,凭什么复杂这么多?

群聊是多人社交基本诉求,一个群友内发了一条消息,期望做到: (1)在线群友能第一时间收到消息; (2)离线群友能在登陆后收到消息消息实时性、可达性、离线消息复杂度,要远高于单对单消息...,如图步骤1-4所述: 步骤1:消息发送者x向server发出消息; 步骤2:server去db查询中有多少用户(x,A,B,C,D); 步骤3:server去cache查询这些用户在线状态...应用层ACK优化后,在线消息发送又发生了一些变化: 步骤3:消息msg_detail存储到消息表后,不管用户是否在线,先将msg_id存储到离线消息表里; 步骤6:在线用户A和B收到消息后,...对于离线每一条消息,虽然只存储了msg_id,但是每个用户每一条离线消息都将在数据库中保存一条记录,有没有办法减少离线消息记录数呢?...有没有办法减少ACK请求量呢? 批量ACK,是一种常见,降低请求量方式。

63620

IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总

3、阅读对象 本文适合作为新老IM开发者备查资料。本文不适合不懂技术普通用户阅读,因为所有内容尽量以技术人员视解整理和表述。 移动端IM产品,微信是标杆,也是事实用户体验标准。...对方把我删除后,我发消息微信提示: ? 6、微信群聊规则汇总 6.1 微信功能定位 微信相当于QQ讨论组,所以没有QQ群号码这种东西。 6.2 群主规则 创建者默认是群主。...6.4 名称规则 每个人(不只是群主)都可以修改名称。 * 补充规则:当超过 100 人时,只有群主可以修改名称。 6.5 公告规则 只有群主可编辑公告。...可以通过列方法实现解散或退出能力: 1)如果是群主(创建者或成员列表第一位),可以将成员全部删除; 2)如果是普通员,可以退出群聊。...2)不看他(她)朋友圈(即屏蔽好友朋友圈): 朋友圈不会显示对方发送朋友圈消息

1.9K20

IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总

3、阅读对象 本文适合作为新老IM开发者备查资料。本文不适合不懂技术普通用户阅读,因为所有内容尽量以技术人员视解整理和表述。 移动端IM产品,微信是标杆,也是事实用户体验标准。...对方将我加入黑名单后,我发消息微信提示: 对方把我删除后,我发消息微信提示:  6、微信群聊规则汇总 6.1 微信功能定位 微信相当于QQ讨论组,所以没有QQ群号码这种东西。...* 补充规则:群主可以设置邀请需确认,即需群主确认后才可以被邀请好友加到内。 6.4 名称规则 每个人(不只是群主)都可以修改名称。...可以通过列方法实现解散或退出能力: 1)如果是群主(创建者或成员列表第一位),可以将成员全部删除; 2)如果是普通员,可以退出群聊。...2)不看他(她)朋友圈(即屏蔽好友朋友圈): 朋友圈不会显示对方发送朋友圈消息

2.3K30

从新手到专家:如何设计一套亿级消息分布式IM系统

需要注意与Feeds系统区别:Feeds系统每个人都有一个写信箱,写只需要往自己写信箱写一次就好了,读需要从所有关注的人写信箱读。...,但这样效率会很低); 2)群聊:需要往所有的成员信箱写一份消息,同时,如果需要查看聊天历史记录的话还需要再写一份。...可以看出,写扩散对于群聊来说大大地放大了写操作。 PS:实际上群聊消息扩散是IM开发技术痛点,有兴趣建议详细阅读:《有关IM群聊技术实现文章汇总》。...IM消息实时性群聊消息和单聊消息处理又有很大区别,有兴趣可以深入阅读: 《IM消息送达保证机制实现(一):保证在线实时消息可靠投递》 《移动端IM中大规模消息推送如何保证效率、实时性?》...同时还需要使用虚拟节点避免数据倾斜问题。 PS:用户状态客户端更新也是个很有挑战性问题,有兴趣可以读一下《IM单聊和群聊在线状态同步应该用“推”还是“拉”?》。

2.9K01

(下部) wechaty 微信机器人源码教程

推送作者微信名片 ③ 自动聊天 群聊通过 @[机器人]xxx 可以和机器人聊天 私聊发送消息即可聊天 ④ 加入群聊自动欢迎 当新小伙伴加入群聊后自动 @[新小伙伴] 发一个文字欢迎 02...需求是我们需要管理群聊,只要有新人加入,我们就发一个欢迎词并@他下 当然这些东西还是config配置好,在这里拿到就可以 此回调接收三个参数 room 群聊实例 inviteeList 受邀者名单...因为我们登录了一个微信号时,群组进入监听是针对微信号中所有群组,我需求是要管理我群组,所以事先跑了下程序,输出了room,然后发个消息,就拿到了我想管理群组所有信息,id自然也在里面,然后写到了配置...看着文件和代码都不少,其实就只是一些逻辑判断而已 一眼API文档,怎么发挥就看你自己了,消息监听这里判断也只做了文本消息判断而已。...你如果想用我这些东西,拉下代码 config.js 换下token和一些配置信息就可以,当然我不停更新,功能会越来越多,所以仓库中代码和文中会有些不一样,使用时简单看下代码,写了详细注释,也很简单

2.8K30

Web端即时聊天项目实现(基于WebSocket)

废话这么多原因一个方面是想以后自己记得当时完成这个项目的心情,另一方面也是想告诉可能看到这篇博客的人,或许你也想做一个Web端即时聊天项目,漫无边际搜索从某一个旮沓角落发现了这篇默默无闻博客...(可以附带验证消息) 一对一聊天 创建群组、查看群组成员、邀请好友进 群聊 Android端: 注册、登陆功能 查看所有好友、群组 一对一聊天 群聊 注意: 这篇博客完成项目不支持高并发!!!...(eg.消息发送时用户不在线,当用户上线时需要查询数据库自己有没有没有没接收消息)单条记录使得无论是单人聊天还有群组聊天,表示是否接收消息变得方便。...“消息”,更新自己好友处在线状态。...2017/2/2 23:45 要实现群聊功能,首先需要设计好维持关系数据库,之前代码已经预留了一对多发送消息接口,因此,消息发送并不是一个难点,聊天窗口也和单人聊天基本一样,也不是很麻烦

2.7K20
领券