如何决定在异步数据同步中应该使用事件的哪个副本?

How to decide which copy of an event should be used in asynchronous data sync?

我有两台处理特定事件的计算机。它们有可能同时检测到同一事件。我需要决定哪个对等方的事件将是唯一剩下的事件(然后对等方必须对该事件做一些事情)。我没有常用的同步工具,比如数据库。

在我看来,问题是这样的:

每个对等点如何决定保留哪个数据包A?双方都生成了数据包,都发送了数据包,现在双方都看到对方发送了自己的副本。

我需要解决此问题,以便一个对等方的数据包 "prevails" 以便该对等方可以执行必要的操作。

我目前的最佳猜测:

我正在考虑 "equip" 带有随机数的数据包。如果其他对等点的数据包具有较低的随机数,它将被丢弃。如果数字等于我的数字,则重复该过程,直到其中一个随机数更大或网络打嗝导致整个握手仅从一侧进行。

我提出的解决方案是否有效?有没有更优的方案?

如果对等点的 ID 为其他对等点所知,您可以保留来自具有较高 ID 的对等点的数据包。

如果他们没有 ID,您可以使用他们的 IP 地址代替。将 IP 转换为整数,比较它们并保留来自 "higher" IP 的发件人的数据包。
==> 由于 NAT(可能有重复的 IP),这可能不够可靠。

您可以使用协议或底层协议的任何可用字段(时间戳、MAC 地址等)。