2013-04-26 77 views
0

我最近試圖建立一個簡單的對等網絡。在我的概念中,同伴嘗試使用第三方「引導」對等源來打開端口並與儘可能多的對等端建立連接以找到對等端。我很快發現一個問題:如何確保對等連接不會加倍(服務器 - >客戶端,客戶端 - >服務器)?

  1. 同行一個開放的端口6013,並宣佈他的存在
  2. 同行B打開一個端口31235,並宣佈他的存在
  3. 節點A接收到B的公告,並連接到對等體B使用3111作爲它的源端口
  4. 對等體B接收A的公告,並連接到對等體B,使用7777作爲它的源端口

此時我們既是連接到B上的服務器套接字nd B連接到A的服務器套接字,但沒有辦法確定它們實際上是相互通信的主機 - 客戶端連接的源端口不建議它們打開哪個服務器端口。而且,我不能通過他們的IP地址來識別對等點,因爲他們可能在某種NAT後面。

我能做些什麼來避免這種情況?在我的情況下,加倍連接不應該導致解除同步問題,但這種冗餘可能會導致我不想要的開銷。

回答

1

每個節點都應該爲自己引入一個它生成的唯一GUID。然後,當A和B彼此建立連接時,他們可以通過簡單地比較它們的GUID來決定誰將成爲主人 - 具有較大GUID的節點變成主人並保持它的連接(即發起連接)。具有較小GUID的節點關閉發起連接並保持接收到的連接。

+0

謝謝,聽起來像一個很好的解決方案! – d33tah 2013-04-26 16:49:17