如何决定在异步数据同步中应该使用事件的哪个副本?
How to decide which copy of an event should be used in asynchronous data sync?
我有两台处理特定事件的计算机。它们有可能同时检测到同一事件。我需要决定哪个对等方的事件将是唯一剩下的事件(然后对等方必须对该事件做一些事情)。我没有常用的同步工具,比如数据库。
在我看来,问题是这样的:
- Peer 1: 发送数据包A给peer 2
- Peer 2:发送数据包A给Peer 1
- 对等点 2:来自对等点 1 的传入数据包 A
- 对等点 1:来自对等点 2 的传入数据包 A
- ...(我有麻烦了)
每个对等点如何决定保留哪个数据包A?双方都生成了数据包,都发送了数据包,现在双方都看到对方发送了自己的副本。
我需要解决此问题,以便一个对等方的数据包 "prevails" 以便该对等方可以执行必要的操作。
我目前的最佳猜测:
我正在考虑 "equip" 带有随机数的数据包。如果其他对等点的数据包具有较低的随机数,它将被丢弃。如果数字等于我的数字,则重复该过程,直到其中一个随机数更大或网络打嗝导致整个握手仅从一侧进行。
我提出的解决方案是否有效?有没有更优的方案?
如果对等点的 ID 为其他对等点所知,您可以保留来自具有较高 ID 的对等点的数据包。
如果他们没有 ID,您可以使用他们的 IP 地址代替。将 IP 转换为整数,比较它们并保留来自 "higher" IP 的发件人的数据包。
==> 由于 NAT(可能有重复的 IP),这可能不够可靠。
您可以使用协议或底层协议的任何可用字段(时间戳、MAC 地址等)。
我有两台处理特定事件的计算机。它们有可能同时检测到同一事件。我需要决定哪个对等方的事件将是唯一剩下的事件(然后对等方必须对该事件做一些事情)。我没有常用的同步工具,比如数据库。
在我看来,问题是这样的:
- Peer 1: 发送数据包A给peer 2
- Peer 2:发送数据包A给Peer 1
- 对等点 2:来自对等点 1 的传入数据包 A
- 对等点 1:来自对等点 2 的传入数据包 A
- ...(我有麻烦了)
每个对等点如何决定保留哪个数据包A?双方都生成了数据包,都发送了数据包,现在双方都看到对方发送了自己的副本。
我需要解决此问题,以便一个对等方的数据包 "prevails" 以便该对等方可以执行必要的操作。
我目前的最佳猜测:
我正在考虑 "equip" 带有随机数的数据包。如果其他对等点的数据包具有较低的随机数,它将被丢弃。如果数字等于我的数字,则重复该过程,直到其中一个随机数更大或网络打嗝导致整个握手仅从一侧进行。
我提出的解决方案是否有效?有没有更优的方案?
如果对等点的 ID 为其他对等点所知,您可以保留来自具有较高 ID 的对等点的数据包。
如果他们没有 ID,您可以使用他们的 IP 地址代替。将 IP 转换为整数,比较它们并保留来自 "higher" IP 的发件人的数据包。
==> 由于 NAT(可能有重复的 IP),这可能不够可靠。
您可以使用协议或底层协议的任何可用字段(时间戳、MAC 地址等)。