如何解决在聊天和用户再次登录时,Messenger 如何维护消息的顺序?
我在一次采访中被问到这个问题,但无法回答。
当两条消息并发时FB messenger如何对用户端的消息进行排序,以避免聊天期间和用户再次访问messenger时显示顺序的视图差异。我以为我们可以为每条消息存储一个时间戳,也就是服务器收到消息的时间。但是,这并不能确保客户端的消息顺序正确。
假设服务器时间戳无法确定消息的确切顺序的场景如下所示:
- 用户 1 向用户 2 的服务器发送消息 M1。
- 服务器在 T1 收到 M1。
- 与此同时,用户 2 向用户 1 的服务器发送消息 M2。
- 服务器在 T2 收到消息 M2,使得 T2 > T1。
- 服务器向 User-2 发送消息 M1,向 User-1 发送 M2。
- 因此,用户 1 将首先看到 M1,然后是 M2,而用户 2 将首先看到 M2,然后是 M1。
我读到可以解决此问题,我们可以使用矢量时钟,但无法理解如何在聊天期间和用户再次登录时为不同用户保留消息顺序。
在上面的场景中,用户 1 将看到 M1 和 M2,而用户 2 将看到 M2 和 M1。现在,如果每个用户还为每个发送到每个客户端的消息(单独)生成一个序列号或时间戳。然后在上面的场景中,user1 将发送带有序列 的消息 M1,而 user2 将发送带有序列 的消息 M2。因此,当消息同时到达 user1 和 user2 时,它们将具有: M1 M2
现在假设 user1 发送更多消息 M3 和 M4 然后每个客户端将有以下消息。 M1 M2 M3 M4
所以在这种情况下,当用户登录时,用户 1 和用户 2 在聊天时的显示顺序将分别是 M1、M2、M3、M4 和 M2、M1、M3、M4。 现在,我想知道如何在再次登录时为 user-1 和 user-2 保留相同的顺序?
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。