im不丢“离线消息”设计

个人博客请访问 http://www.x0100.top  

问题:接收方不在线时,消息发送的流程是怎么样的?


回答:如上图所述,

(1)用户A发送消息给用户B

(2)服务器查看用户B的状态为offline

(3)服务器将消息存储到DB中

(4)服务器返回用户A发送成功(对于发送方而言,消息落地DB就认为发送成功)

 

问题:离线消息表的设计,拉取离线的过程?

receiver_uid, msg_id, time, sender_uid,msg_type, msg_content …

访问模式:接收方B要拉取发送方A给ta发送的离线消息,只需在receiver_uid(B), sender_uid(A)上查询,然后把离线消息删除,再把消息返回B即可。


整体流程如上图所述,

(1)用户B拉取用户A发送给ta的离线消息

(2)服务器从DB中拉取离线消息

(3)服务器从DB中把离线消息删除

(4)服务器返回给用户B想要的离线消息

 

问题:上述流程存在的问题?

回答:如果用户B有很多好友,登陆时客户端需要对所有好友进行离线消息拉取,客户端与服务器交互次数较多

客户端伪代码:

for(all uid in B’s friend-list){      // 登陆时所有好友都要拉取

         get_offline_msg(B,uid);   // 与服务器交互

}

优化方案一:先拉取各个好友的离线消息数量,真正用户B进去看离线消息时,才往服务器发送拉取请求(手机端为了节省流量,经常会使用这个按需拉取的优化)


优化方案二:一次性拉取所有好友发送给用户B的离线消息,到客户端本地再根据sender_uid进行计算,这样的话,离校消息表的访问模式就变为->只需要按照receiver_uid来查询了。登录时与服务器的交互次数降低为了1次

 

问题:用户B一次性拉取所有好友发给ta的离线消息,消息量很大时,一个请求包很大,速度慢,容易卡顿怎么办?


回答:分页拉取,根据业务需求,先拉取最新(或者最旧)的一页消息,再按需一页页拉取。

 

问题:如何保证可达性,上述步骤第三步执行完毕之后,第四个步骤离线消息返回给客户端过程中,服务器挂点,路由器丢消息,或者客户端crash了,那离线消息岂不是丢了么(数据库已删除,用户还没收到)?

回答:嗯,如果按照上述的1,2,3,4步流程,的确是的,那如何保证离线消息的可达性?


如同在线消息的应用层ACK机制一样,离线消息拉时,不能够直接删除数据库中的离线消息,而必须等应用层的离线消息ACK(说明用户B真的收到离线消息了),才能删除数据库中的离线消息

 

问题:如果用户B拉取了一页离线消息,却在ACK之前crash了,下次登录时会拉取到重复的离线消息么

回答:拉取了离线消息却没有ACK,服务器不会删除之前的离线消息,故下次登录时系统层面还会拉取到。但在业务层面,可以根据msg_id去重。SMC理论:系统层面无法做到消息不丢不重,业务层面可以做到,对用户无感知。

 


问题:假设有N页离线消息,现在每个离线消息需要一个ACK,那么岂不是客户端与服务器的交互次数又加倍了?有没有优化空间?


回答:不用每一页消息都ACK,在拉取第二页消息时相当于第一页消息的ACK,此时服务器再删除第一页的离线消息即可,最后一页消息再ACK一次。这样的效果是,不管拉取多少页离线消息,只会多一个ACK请求,与服务器多一次交互。

 

总结

“离线消息”的可达性可能比大家想象的要复杂,常见的优化有:

(1)对于同一个用户B,一次性拉取所有用户发给ta的离线消息,再在客户端本地进行发送方分析,相比按照发送方一个个进行消息拉取,能大大减少服务器交互次数

(2)分页拉取,先拉取计数再按需拉取,是无线端的常见优化

(3)应用层的ACK,应用层的去重,才能保证离线消息的不丢不重

(4)下一页的拉取,同时作为上一页的ACK,能够极大减少与服务器的交互次数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34354.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试版降级后软件还在么,2分钟告诉你如何将iOS测试版降级到正式版本

原标题:2分钟告诉你如何将iOS测试版降级到正式版本 话说亓纪为了体验iOS 11最新系统,经常会往返于iOS 11测试版和正式版系统之间。每次发一篇关于测试版系统该不该升级的文章时,总会有小童鞋来留言或者私信问亓纪关于iOS 11测试版如何降级到正…

iPhoneX利用unc0ver来越狱iOS12

在iOS11时代,有两种越狱的方式,一种是unc0ver,一种是electra,它两的历史还是挺有趣的,unc0ver的开发者本来是electra的成员,但由于不满某些东西,所以自己出来又搞了unc0ver,说是改进了越狱错误显示等,更加友好了,不过我亲身体验了两种,发现unc0ver各种不稳定,并不是像他们自己标…

iOS手机绕过App的越狱检测

iOS越狱之后,某些App会检测到iOS设备已越狱后,一些功能就会被禁用,导致无法正常使用App里面的所有功能 1.iOS绕过越狱检测的所需环境 Cydia 、Liberty 2.添加Cydia源 (1).在手机桌面上找到Cydia的图标,点击进入 (2).先点击下方软…

iOS 逆向-非越狱手机Hook App

引子 由于对iOS逆向分析很感兴趣,所以也花了很长一段时间学习了iOS逆向相关知识,并积累了一些相关经验, 这几天又到看雪论坛逛了一下,看看最近有没有什么大牛分享心得成果的!还真让我看到一篇有意思的文章【原创】微信双开是定时…

彻底告别等待越狱!不越狱安装下载的IPA,iPhone 4S iOS5已测!!希望大家支持!

希望这个教程能够真正帮助到想要测试的人,毕竟通过这个办法可以不越狱安装绝大多数IPA。第一次写教程,难免有错,望包容~ 我搜过论坛,发现有人在6月份就开始发了教程,但是都含含糊糊,并没有说清楚&#xff…

苹果的反跟踪新功能大受欢迎,你更新了吗?

微信搜索逆锋起笔关注后回复编程pdf领取编程大佬们所推荐的 23 种编程资料! 作者 | 罗燕珊 Facebook 担忧 iOS 14.5 将大幅影响收入,并不是没有道理的。在不久前的 4 月 27 日,苹果正式推送了 iOS 14.5,而此次更新最受关注的变化是…

Apipost:不登录、离线脱机都能用!

现在市面上很多产品,基本上都会强制用户登录使用,虽然大多数人都已经司空见惯,但是心里属实会有点膈应:毕竟很多强制登录都是为了更多获取用户信息。 对于很多用户而言,我们对很多新产品可能只是想先体验一下&#xf…

批量给TXT文档插入带标题合成图片-Chatgpt生成TXT文档配图神器

1、我们用《Chatgpt 3.5-turbo软件》批量生成txt文档,但是这样txt文档里不带图片,直接发布到网站上,光有文字没有图片,效果也不是很理想,就需要一款配图软件。 2、提高文章的可读性和吸引力:插入图片可以丰…

小文智能宣布接入ChatGPT,智能化客户服务,开创全新用户体验

小文智能是一家致力于用AI技术解放劳动力的公司,最近我们接入了ChatGPT技术,深度探索AI在智能对话机器人领域应用的更多可能,这将为我们的客户带来更为优质的人机对话服务和全新的用户体验。 ChatGPT是一种基于人工智能的自然语言处理技术&a…

深度分析C3.ai的投资前景,股价暴涨200%后,未来是否还会继续上涨?

来源:猛兽财经 作者:猛兽财经 C3.ai(AI)是Forrester Wave在企业AI领域的领导者。该公司在开发人工智能“平台”方法方面走在了时代的前面,在能源领域、航空航天和国防等各个行业都有大量应用。 人工智能行业在2022年的市场规模已经达到了1365…

“千年老二”Bing要翻身?

微软推出新版Bing和Edge,打响互联网巨头AI大战的第一枪,首轮赛跑定位大众最常接触的搜索引擎和浏览器。 Statcounter数据显示,全球搜索引擎市场份额中,谷歌占92.9%,Bing仅占3.03%,剩余不到5%,留…

李彦宏解读百度电话会议:文心一言会更适合中国市场

雷递网 雷建平 2月23日 百度(NASDAQ:BIDU,HKEX: 9888)昨日发布财报。2022年,百度实现营收1236.75亿元,归属百度的净利润(非美国通用会计准则)206.8亿元,同比增长10%。 百…

百度财报解读:营收持平净利增,“文心一言”站C位

ChatGPT之火,点燃了投资者对AI赛道的热情。 而自百度宣布生成式AI产品“文心一言”(ERNIE Bot)将于3月推出以来,这家公司一直处于市场关注的焦点。 2月22日,百度发布了2022年第四季度及全年财报。财报显示&#xff0c…

2023年Q1美团财报解读:拨开云雾 始见月明

原文出处:走马财经 5月底,随着京东、阿里巴巴、腾讯、快手、拼多多、美团等相继发布财报,中国互联网主流大公司的财报发布季结束。 一方面他们体量够大,另一方面他们要么深耕零售,要么与零售、消费息息相关&#xff…

B站电话会议解读:今年整体亏损更明显收窄 2024年盈亏平衡

雷递网 雷建平 3月3日 哔哩哔哩(NASDAQ: BILI,HKEX:9626;简称“B站”)昨日公布截至2022年12月31日的第四季度和全年财务报告。财报显示,2022财年B站总营收219亿元,同比增长13%。 B站2022年增值服务业务收入…

两个月 8 万行代码, 我是如何写出 GPT-Runner 直接对话文件和管理运行 AI 预设的

前言 实时对话代码库?? 我是第一批 copilot 内测用户,早在 2021 年 11 月我就开始体验 copilot 了。在 chatgpt 出来第二天我就注册并体验了。 可以说别人还在农耕时代我就早早地用上了蒸汽机。这让我在开发效率上获得了巨大的优势&#x…

Spring Boot 3.1 正式发布,更新了一大批新特性。。学不动了!

点击关注公众号,Java干货及时送达 学习 Spring Cloud 微服务的正确姿势! 用上 ChatGPT 啦,强的离谱! 终于把 Spring Boot 3.0 写成书了! Spring Boot 3.1 正式发布 大家好,我是R哥。 上一篇:Spr…

图谱实战 | Shopee 多语言商品知识图谱技术构建方法和应用

转载公众号 | DataFunTalk 导读 Shopee 是一家服务于全球多个市场的电商平台,致力于为消费者提供更加便捷,安全,快速良好的消费体验。Shopee 深耕多种不同的语言和市场,在这种国际化的服务平台上,需要处理多语言和混合…

前沿对话:中国AIGC新机遇,如何掘金大模型和应用双赛道

3月29日消息,首届中国AIGC产业峰会在京举行,大会由量子位主办,聚集起了领域内产学研代表,分享和探讨了包括大模型、生成式AI、ChatGPT等在内时下热议趋势和话题。 图片来源:由无界AI生成 在题为《中国AIGC新机遇》的圆…

【你问我答】与ChatAI智能对话—AI应用研习社

ChatGPT是一种基于深度学习的自然语言处理模型,它可以用于聊天机器人、智能客服、语音助手等多种应用场景。ChatGPT的核心技术是GPT(Generative Pre-trained Transformer),它是一种非常强大的语言模型,可以生成高质量的…