2017-01-28 88 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) –