如何在对等网络中解决客户端注册问题?

时间:2017-07-09 18:32:07

标签: node.js session socket.io p2p peer

背景

我想制作我自己的同类对等网络(需要自定义)。我使用SocketIO制作它,它工作正常。首先,我使用客户端 - >服务器架构,但它不适合我的目的。

现状

现在,我在构建peer 2 peer版本时遇到了一个问题。连接所有客户端后,他们需要相互了解(ID +主机名)。为此,我提出了以下计划。

  1. 客户端连接到组中的Socket IO(与其他一些设备同时连接),被添加到与其他绑定客户端的会话池中(使用中间NodeJS路由器完成)。

  2. 每个新客户端都会广播newClient信号。

  3. 每个客户在初次加入时都会向其他人广播ID +设备数据。

  4. 直到这里,一切都很好并且正常工作。

    1. 每当客户端收到newClient信号时,重复步骤3,因此如果设备在创建步骤1中的初始会话后加入会话,则新设备也会从现有设备接收客户端数据。 / LI>

      问题

      如果有与n个设备的会话,则步骤3可能会amount(对于x > 2和N的元素)。

      对于100个客户,第3步将发生5153次。这是非常高的。

      是否有更聪明的方法可以减少设备数据的广播,并且仍然让所有连接的设备相互了解?

1 个答案:

答案 0 :(得分:3)

您可以使用DHT(Distributed Hash Table)结构,其中网络的每个节点都由密钥标识(基于您的应用程序ID +设备的确定性散列),并且节点按其散列索引。

一个这样的结构是chord,其中所有节点都以预定最大尺寸N = 2 ^ m的圆形结构组织,具有后继函数(S(n)= n + 1; S(2) ^ m)= 0)。每个节点在此圆圈中的位置由其散列给出。每个节点都保留一个m 指针的列表:距离节点自身位置2 ^ 0,... 2 ^ m的最近的后继者列表。当一个节点进入网络时,它连接到网络中的任何入口点(网络中的至少一个已知节点),然后通过跟随入口点的指针表中最近的节点找到它的第一个后继(在时间O(N)中),因此上。最后,只有相邻节点更新其指针表。

以下是描述使用和弦结构的Efficient Broadcast in Structured P2P Networks算法的论文。

希望这有帮助。