如何确保对等连接不会加倍(服务器 - >客户端,客户端 - >服务器)?

时间:2013-04-26 16:28:17

标签: p2p

我最近试图建立一个简单的点对点网络模型。在我的概念中,对等体尝试使用第三方“引导”对等源来打开端口并与尽可能多的对等体建立连接以找到对等体。我很快发现了一个问题:

  1. Peer A打开一个端口6013并宣布他的存在
  2. Peer B打开一个端口31235并宣布他的存在
  3. 对等体A接收B的通告并连接到对等体B,使用3111作为其源端口
  4. 对等体B接收A的通告并连接到对等体B,使用7777作为其源端口
  5. 此时我们将A连接到B和B的服务器套接字连接到A的服务器套接字,而无法确保这些实际上是相同的主机相互通信 - 客户端连接的源端口不建议他们打开哪个服务器端口。此外,我无法通过IP地址识别对等体,因为它们可能落后于某种NAT。

    我可以做些什么来避免这种情况?在我的情况下,加倍连接不应该真正导致去同步问题,但这种冗余可能会导致我不想要的开销。

1 个答案:

答案 0 :(得分:1)

每个节点都应该使用它生成的唯一GUID自我介绍。然后,当A和B彼此建立连接时,他们可以通过简单地比较它们的GUID来决定谁将成为主设备 - 具有较大GUID的节点成为主设备并保持其连接(即它启动的连接)。具有较小GUID的节点关闭发起连接并保持接收的节点。