网易首页 > 网易号 > 正文 申请入驻

微信:我们绝不丢消息!

0
分享至

有水友问我说,总感觉微信不丢消息,它是怎么做到的?

之前做过几十年IM架构,今天和大家聊聊消息的可靠投递

IM系统中,报文分几种类型?
答,三种:

1. 请求报文(Request)

2. 应答报文(Acknowledge)

3. 通知报文(Notify)


R:客户端主动发送给服务器的报文;
A:服务器被动应答客户端的报文,一个A对应一个R;
N:服务器主动发送给客户端的报文;

路人架构师如何设计消息投递流程?
一个没做过IM系统的路人架构师,他可能会这么设计消息投递流程:用户A给用户B发送“你好”:


1. client-A向im-server发送msg:R;
2. im-server回复client-A一个msg:A;
3. 如果此时client-B在线,则im-server向client-B发送msg:N;

画外音:如果client-B不在线,im-server存储离线消息。

上述消息投递流程存在什么问题?
流程图中会发现,发送方client-A收到msg:A后,只能说明im-server成功接收到了消息,并不能说明client-B接收到了消息。

在若干场景下,可能出现msg:N包丢失,例如:
1. 服务器崩溃,msg:N包未发出;
2. 网络抖动,msg:N包被网络设备丢弃;
3. client-B崩溃,msg:N包未接收;

结论是悲观的:接收方client-B是否有收到msg:N,发送方client-A完全不可控。

那怎么办呢?

应用层的消息可靠投递,必须通过应用层的超时、重传、确认来保证。

首先,加入应用层的确认机制。

要想让发送方client-A确保接收方client-B收到了消息,必须让接收方client-B回复client-A一个消息的确认。这个应用层的确认流程,与消息的发送流程类似:


4. client-B向im-server发送ack:R;
5. im-server回复client-B一个ack:A;
6. im-server向client-A发送ack:N;

至此,发送“你好”的client-A,在收到了ack:N报文后,才能确认client-B真正接收到了“你好”。

你会发现,一条“你好”的发送,分别包含上下两个半场,即msg的R/A/N三个报文,ack的R/A/N三个报文,这是IM系统中消息投递的核心。

还可能存在什么问题?
复杂的网络环境下,msg:N,ack:N这两个报文都可能丢失(服务器奔溃、网络抖动、客户端奔溃),此时client-A都收不到期待的ack:N报文,即client-A不能确认client-B是否收到“你好”,但这两个报文的丢失对应的业务影响又大有不同:

1. msg:N包丢失,业务结果是client-B没有收到消息;

2. ack:N包丢失,业务结果是client-B收到了消息,只是client-A不知道而已;

结论仍然是悲观的:client-A无法知晓具体是哪种情况

那怎么办呢?

接下来,要加入超时与重传。

client-A发出了msg:R,收到了msg:A之后,在一个期待的时间内,如果没有收到ack:N,client-A会尝试将msg:R重发。

可能client-A同时发出了很多消息,故client-A需要在本地维护一个等待ack队列,并配合timer超时机制,来记录哪些消息没有收到ack:N,以定时重发。


一旦收到了ack:N,说明client-B收到了“你好”消息,对应的消息将从“等待ack队列”中移除。

消息的重传会引入什么新的问题?

超时与重传机制可能导致client-B收到重复的消息。

那怎么办呢?

最后,client-B要引入消息的去重机制。

发送方client-A生成一个消息去重的msgid,保存在“等待ack队列”里,同一条消息使用相同的msgid来重传,供client-B去重,而不影响用户体验。

也就是说,系统层面,client-B其实收到了很多消息,而产品体验层面,用户并不知道。系统,就是在背后默默保证你体验的那个人!

总结:

1. IM系统通过超时、重传、确认、去重的机制来保证消息的可靠投递;
2. 一个“你好”的发送,包含上半场msg:R/A/N与下半场ack:R/A/N的6个报文;

3. 等待ACK队列,是超时重传的关键,重传的消息msgid相同;

4. 无法做到系统层面的不丢不重,只能做到业务层面的不丢不重;

知其然,知其所以然。思路比结论更重要。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
爱泼斯坦案一女孩穿水手服跪地画面曝光,美司法部称其系未成年受害者

爱泼斯坦案一女孩穿水手服跪地画面曝光,美司法部称其系未成年受害者

新京报
2026-02-03 17:18:16
生日前夕被“逼宫”,奔驰四天后调价10%

生日前夕被“逼宫”,奔驰四天后调价10%

ZAKER新闻
2026-02-04 09:22:12
爆雷的私处“高潮针”,掏空2亿少妇!

爆雷的私处“高潮针”,掏空2亿少妇!

广告创意
2025-08-21 17:30:28
银川捅人致死的黄某44岁!摆水果摊,自己又得白血病,生活很拮据

银川捅人致死的黄某44岁!摆水果摊,自己又得白血病,生活很拮据

火山诗话
2026-02-03 06:06:14
挣再多钱有什么用,郭晶晶如今的现状,给所有退役运动员提了个醒

挣再多钱有什么用,郭晶晶如今的现状,给所有退役运动员提了个醒

小椰的奶奶
2026-02-04 09:48:46
官方:猛龙队主帅拉贾科维奇当选NBA全明星世界队主教练

官方:猛龙队主帅拉贾科维奇当选NBA全明星世界队主教练

懂球帝
2026-02-04 01:25:11
艾滋病数据冲上热搜,背后是你看不到的性需求

艾滋病数据冲上热搜,背后是你看不到的性需求

十点读书
2026-02-01 18:38:37
大多数女人愿意和一个男人长期联系,说白了其实就这俩原因而已

大多数女人愿意和一个男人长期联系,说白了其实就这俩原因而已

文雅笔墨
2025-12-10 00:44:55
小舅子群里安排过年聚餐,我秒回:房已卖,正和你姐飞马尔代夫

小舅子群里安排过年聚餐,我秒回:房已卖,正和你姐飞马尔代夫

晓艾故事汇
2026-01-10 09:09:29
别把 “暴露” 当时尚!格莱美女星遭网友吐槽,戳中全球审美痛点

别把 “暴露” 当时尚!格莱美女星遭网友吐槽,戳中全球审美痛点

小徐讲八卦
2026-02-03 06:38:51
深圳正式发布!2026春节,全市禁止!

深圳正式发布!2026春节,全市禁止!

深圳梦
2026-02-03 23:09:00
曼联官宣压哨卖第四人,巨头叫停铁闸交易!没买人却化身出租狂魔

曼联官宣压哨卖第四人,巨头叫停铁闸交易!没买人却化身出租狂魔

罗米的曼联博客
2026-02-03 09:48:45
川普发威:来自格莱美颁奖礼的声音

川普发威:来自格莱美颁奖礼的声音

书生论剑
2026-02-04 00:02:45
33.2万!特斯拉新车曝光:4月1日,正式发布

33.2万!特斯拉新车曝光:4月1日,正式发布

高科技爱好者
2026-02-01 22:48:52
世纪7换4,大交易开始了

世纪7换4,大交易开始了

体育新角度
2026-02-04 08:41:08
警惕!仙人跳3.0杀疯了,专坑老实人,一次私了就可能毁终身

警惕!仙人跳3.0杀疯了,专坑老实人,一次私了就可能毁终身

老特有话说
2026-01-29 23:44:15
短短25天 3名乌克兰女将6争议言行:拒绝握手+合影 嘲讽对手出局

短短25天 3名乌克兰女将6争议言行:拒绝握手+合影 嘲讽对手出局

风过乡
2026-02-04 07:40:20
雷克萨斯确认:新一代ES四月上市!现款不停产继续卖

雷克萨斯确认:新一代ES四月上市!现款不停产继续卖

网上车市
2026-02-03 10:53:12
CCTV直播!亚洲杯2月4日赛程:孙颖莎打响揭幕战 王楚钦首秀冲冠,国乒集体亮相海口

CCTV直播!亚洲杯2月4日赛程:孙颖莎打响揭幕战 王楚钦首秀冲冠,国乒集体亮相海口

好乒乓
2026-02-04 06:27:32
和领导的410次开房记录,写着她从临时工到副处长的每一步努力!

和领导的410次开房记录,写着她从临时工到副处长的每一步努力!

闲侃闲侃
2026-01-29 08:36:50
2026-02-04 10:23:00
ITPUB学院
ITPUB学院
分享技术干货,了解最新动态
1163文章数 627关注度
往期回顾 全部

科技要闻

李飞飞:AI的终点不是写代码,而是人类的尊严

头条要闻

强奸大嫂凶手出狱后去大嫂家 大嫂吓得穿内衣跑出求救

头条要闻

强奸大嫂凶手出狱后去大嫂家 大嫂吓得穿内衣跑出求救

体育要闻

“也许我的一小步,会成为中国足球的一大步”

娱乐要闻

大S逝世一周年 S家没通知大S子女惹争议

财经要闻

中央一号文件:扎实推进乡村全面振兴

汽车要闻

上汽决定不再等那个“正确答案”了

态度原创

本地
游戏
时尚
教育
公开课

本地新闻

云游中国|拨开云雾,巫山每帧都是航拍大片

《无主之地4》Switch 2版疑似被砍 T2称已暂停开发

状态比10年前更好,她到底做对了什么?

教育要闻

圆的性质第2讲,一个视频学会!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版