1 前言
暗恋女神良久,终于鼓起勇气决定向女神写一封情书。但如何表达才能感动女神?自感才疏学浅,于是通读四书五经、熟背唐诗宋词、遍览四大名著,已然腹有诗书气自华。一周末冥思苦想整日才写就一首七言律诗,虽无惊天地泣鬼神之势,但诚挚的爱念在字里行间里流淌,亦歌亦诗,相信会感动到女神,手机欣然发出。
发出一秒后,手心冒汗,感觉脸颊发烫,心脏像受惊吓的野兔一样快速跳动,就像第一次看见女神那时的感觉。闭着眼睛,想象女神看到消息时的情形,她是否也期盼我的表白?看到消息时是否心跳加速、小脸绯红?
一分钟后,紧盯手机屏幕,等待、期盼女神回复。
时间一分一秒地逝去,等一分钟像等一年一样漫长。
一小时后,仍然杳无音讯,难道她没看到消息么?或许在忙什么而没留意手机吧!
一天过去了,坐立不安,等待是一种痛苦的煎熬,期待和煎熬在心中交织翻滚,有几个瞬间甚至希望女神赶快拒绝自己,好让自己解脱!茶饭无味,失眠多天,整日魂不守舍。
一个月过去了,死心。
半年后,女神出嫁,婚礼那天前去祝福。席间亦随众觥筹交错,略有醉意,向女神敬酒:祝福你,但愿以后能遇见像你这样的女人。女神先是愣住、收起笑容,低下头,目光无神地看着大红地毯,长叹一声,言:我等你表白,等了一年!空气凝滞了几秒,女神强作欢颜:从今往后,各自安好吧,干杯!我转身踱回到座位,拿起手机,打开那个App,看着曾经发出的情书,一切仿佛还在昨日,但故事脚本已被别人书写,欲哭无泪,叹老天为何如此捉弄我?为何我发的消息女神没收到啊!
失魂落魄地回到家里,从冰箱里拿出几瓶罗斯福10号来麻醉自己,在酒精强烈的作用下,迷迷入睡。
第二天醒来,我明白了一个道理:对IM系统而言,消息必达永远摆在第一位!-----分割线-----以上是正文,以下开始胡说八道。
2 用离线消息实现消息必达
我们在重构IMS时,需解决上一代设计的痛点之一就是确保消息必达。
2.1 离线消息实现消息必达的流程
自然而然地会想到这么做:
由服务端为每个人保存一个“离线消息列表”,当用户在线时,由IMS主动确保消息下发且收到客户端的应答确认时,才认为消息送达客户端,相应地把消息从“离线消息列表”移除;
如果客户端没有发回应答确认,IMS会再发送。
以此来确保消息一定送到客户端,看起来是很符合逻辑。当时调查过市面上多款IM,行为基本如此。
2.1 海啸般的离线消息
2.1.1 和平时期
重构后的IM上线,内部测试及在公网运行,离线消息的工作一直很正常。