如何确定异步数据同步中应使用哪个事件副本?

时间:2016-07-28 12:15:48

标签: asynchronous network-programming data-synchronization

我有两台处理某些事件的电脑。它们可能同时检测到同一事件。我需要确定哪个对等方的事件将是剩下的唯一事件(然后对等方必须对事件做一些事情)。我没有可用的通用同步工具,例如数据库。

我认为这个问题是这样的:

  • 对等方1:将数据包A发送给对等方2
  • 对等方2:将数据包A发送给对等方1
  • 对等方2:来自对等方1的传入数据包
  • 对等方1:来自对等方2的传入数据包
  • ...(我遇到了麻烦)

每个对等方如何决定保留哪个数据包?两者都生成了数据包,两者都发送了它,现在两者都看到另一个对等体发送了自己的副本。

我需要解决此问题,使得一个对等方的数据包“占优势”,以便该对等方可以执行必要的操作。

我目前最好的猜测:

我正在考虑用随机数“装备”数据包。如果另一个对等体的数据包具有较低的随机数,则将其丢弃。如果number等于我的,则重复该过程直到其中一个random更大或者网络中的打嗝导致整个握手仅从一侧通过。

我建议的解决方案是否有效?有更优化的解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果对等体具有其他对等体已知的ID,则可以保留源自具有较高ID的对等体的分组。

如果他们没有ID,您可以改用他们的IP地址。将IP转换为整数,比较它们并使用“更高”的IP保持发送方的数据包。
==> 由于NAT(可能存在重复的IP),这可能不够可靠。

您可以使用协议的任何可用字段或基础协议(时间戳,MAC地址等)。