2017-01-28 34 views
1

我知道一个快速的Google可以使用大量的结果,关于这个主题的文献非常丰富,而这正是问题所在。在众多可能的解决方案中,我不确定哪些是特别针对我的特定需求的最佳最新选择。实施p2p消息广播网络的现状是什么?

我试图通过互联网实现一个P2P网络,它具有向在线节点广播消息的唯一功能和一个功能。为了连接到网络,您必须能够指向现有的IP。当你这样做时,你会发现一些同伴并与他们保持积极联系。然后您可以将消息发送到其他每个节点。没有直接的沟通,发送的每条消息都被其他人接收。我希望这个网络尽可能保持性能,并且在UDP之上工作。

在这里指定的形状上解决这个问题的一些艺术算法的名称是什么?

+0

如果您广播,那么你击中局域网中的每台主机,而无需知道各个IP地址。 –

+0

哦,我的意思是一个应用程序。想想一款手机游戏。我希望用户能够在不涉及中央服务器的情况下播放他们的动作。 – MaiaVictor

+0

现在,我很困惑。你的意思是你想单播数据包给玩家吗?广播被发送到LAN上的每个主机。单播被发送到特定主机,并且组播被发送到已经订阅了多播组的主机组。这听起来像你可能想要使用多播,然后每个播放器主机会监听发送到多播组的数据包,并且不会影响LAN上的其他主机。 –

回答

2

通过互联网在覆盖网络上广播单个消息是一件相当简单的事情。你加入网络,建立一个随机或结构化的邻居路由表,用消息泛洪邻居,他们对邻居做同样的事情,减去一些修剪以避免转发循环。

复杂性来自附加约束和要求,因网络而异。例如。匿名设置中的信任问题,延迟优化,优化许多消息的高带宽流(p2p辅助的实况视频广播)等。

+0

我很高兴听到这很简单,但有一些并不明显的并发症。你的意思是一个随机路由表;究竟如何?每个节点如何保存同伴列表?为此,最初的“入口节点”必须有一个所有节点的列表,不是?如果您有任何有用的链接/关键字。无论如何,谢谢你的回答! – MaiaVictor

+0

有用的关键词打入谷歌学者(可以在一定程度上):“覆盖网络”,“结构覆盖”,“小世界”,“路由表”,“邻居列表”,“引导”...一般引导和路由表维护是消息传播的一个独立问题。您需要逐个构建您的p2p算法。 – the8472

4

如果您想了解设置分散式P2P架构的概念,看看Dat Project,他们为互联网上的P2P数据共享提供了一个模块生态系统,例如Hypercore(原始P2P流)和Hyperdrive(在超核心之上的文件传输)。 他们有关于技术概念,挑战以及他们如何解决这些问题的一些很好的文档。

一些在P2P挑战设计:

  • NAT路由器和防火墙:通过实施NAT穿越和UDP打洞克服(参见:The State of NAT Traversal由ZeroTier)
  • 发现对等体:Dat Project使用Gossiping作为一群同事在网络上找到对方的有效方式,以及一个简单的(protobuf)有线通信协议(参见:HyperdiscoveryHypercore Protocol)。
  • P2P数据通信/同步:多核实现附加-只记录在每个对等体,和梅克尔为以正确的顺序聚合和重复数据删除从其他对等端的数据块的树木

两个TCP,UDP,的WebRTC和BitTorrentDHT由Dat Project支持。

请仔细阅读他们的一些规范的文档对于这些概念的深入信息和协议设计:

+0

我刚刚在活动p2p技术中添加了更多信息,并在移动设备上的分散式视频应用中使用了Dat Project:[A:使用WebView的android上的p2p视频/音频聊天](https://stackoverflow.com/a/45476871/8295283) –