whatsapp 消息递送丢失

加入receiver在线但消息递送丢失了怎么办?message server会短暂的存储消息吗(等待收到receiver areceived的消息再删除)?或者短暂存储在cache里面?

消息如果递送失败的话,可以考虑 retry 这个 request 或者请求客户端重新发送一个 Request。 我不倾向于用 Cache 做短期存储,这样会产生类似的问题 - 删除缓存失败。

为了保证消息顺序是不是要等上一个消息发送完收到ack以后在给这个receiver发下一个消息?

我觉得不需要,还是尽快递送,然后在客户端上排序就好。

既然是在客户端上排序,那为什么还需要message server里的queue,直接web socket server把信息forward过去就好了?因为message server对于user都在线的情况只是起到forward message的功能而已

Queue 的另一个作用是当信息量大的时候,没法立刻递送出去,可以做一个缓冲,所以总是需要的。
至于是不是一定要排好顺序,我觉得是仁者见仁,智者见智了。提前做一下排序,用户这边顺序出错,需要本地排序的可能性就更低一些,但是消息递送延迟可能会高一点点。在客户端上排序会造成用户体验的短时间内的牺牲。