2016-07-28 37 views
0

我有兩臺處理特定事件的計算機。他們可能同時檢測到相同的事件。我需要決定哪個對手的事件將成爲剩下的唯一事件(然後對手必須對事件做些事情)。我沒有可用的通用同步工具,例如數據庫。如何確定應該在異步數據同步中使用哪個事件副本?

的問題,我看到它,是這樣的:

  • 等體1:發送信息組A到對等體2
  • 對等體2:發送信息組A到對等體1
  • 對等體2:傳入來自對等體1
  • 端1信息組A:傳入分組甲從對等體2
  • ...(我就麻煩)

每個對等體如何決定要保留哪個數據包?兩者都生成了數據包,兩者都發送了它,現在兩者都可以看到另一個對端發送了自己的副本。

我需要解決這個問題,以便一個對等方的數據包「佔上風」,以便該對等方可以執行必要的操作。

我目前最好的猜測:

我想以「裝備」包與一個隨機數。如果另一個對方的數據包有一個較低的隨機數,它將被丟棄。如果數字與我的數字相同,則重複該過程,直到其中一個隨機數更大或者網絡中的呃逆導致整個握手只從一側通過。

我的建議解決方案是否可以工作?有沒有更優化的解決方案?

回答

1

如果對等體有其他對等方已知的ID,則可以保留源自具有較高ID的對等體的分組。

如果他們沒有ID,則可以使用他們的IP地址。將IP轉換爲一個整數,比較它們並使用「較高」IP保留髮件人的數據包。
==>由於NAT(可能有重複的IP),這可能不夠可靠。

您可以使用協議的任何可用字段或來自底層協議(時間戳,MAC地址等)。

+0

哈哈。在我已經有了區分ID的情況下,我在這裏發明了一些隨機數。p這當然意味着最終它會是大部分時間都在做同樣事情的同一個同伴,但老實說,我不明白這會是什麼樣的危害。 – velis

+0

呵呵,我們都在那裏;)但分享工作是一個有趣的約束。也許一個(已經存在和共享的)字段,比如task/command-Nr可以用於交換:如果命令是偶數的,那麼更大的ID就可以工作。如果它很奇怪,那麼較小的ID就可以。 – 1000ml