我想使用 P2P 构建一个去中心化的、类似 reddit 的系统。我应该基于啥现有的 p2p 库?

Posted

技术标签:

【中文标题】我想使用 P2P 构建一个去中心化的、类似 reddit 的系统。我应该基于啥现有的 p2p 库?【英文标题】:I want to build a decentralized, reddit-like system using P2P. What existing p2p library should I base it on?我想使用 P2P 构建一个去中心化的、类似 reddit 的系统。我应该基于什么现有的 p2p 库? 【发布时间】:2011-08-02 12:06:21 【问题描述】:

我想使用 P2P 构建一个分散的、类似于 reddit 的系统。基本上,我想保留 reddit 的基本功能,但使其去中心化,使其更加健壮且不受审查。这也将允许人们开发不同的客户端来匹配他们想要的浏览方式。

您能否推荐一些好的 p2p 库来作为我工作的基础?它们应该是开源的、跨平台的、强大的和易于使用的。我不太在乎语言,我可以适应。

【问题讨论】:

你应该看看分布式哈希表,有几种生产质量的实现。可能你不需要更多......另外:我非常喜欢你的想法;) 谢谢!我也喜欢这个想法,但它似乎是一项非常艰巨的任务......如果你有兴趣帮助我,你可以订阅 reddit/r/decentralized。当想法变得清晰时,我会尝试招募更多的人。 我警告您,历史上的分布式解决方案几乎没有获得什么吸引力,而且市场上充斥着 reddit 克隆。因此,您将不得不努力推广它并注册足够的初始用户以保持势头。祝你好运! 我应该补充一点,您的用户可能不会使用任何类型的罗马脚本,所以无论您做什么,请确保 unicode 在整个过程中正常工作;也许还可以为人们提供一个功能来过滤他们看到的内容并根据使用的字符集进行搜索? 我发现这个问题正在研究同样的想法。您将面临的最大问题是人们试图玩弄系统。由于集中化,Reddit 可以轻松确保一个用户对每个评论和帖子获得一票,并且版主可以控制 subreddit。根据定义,去中心化版本将没有人拥有权威。这并不是说不可能,而是您必须考虑的额外问题。 【参考方案1】:

免责声明:警告,在这里自我宣传!!!

您考虑过JXTA 最新的release 吗?对于您想要做的事情,这可能就足够了。另外,我们正在开发一个名为Chaupal 的新 P2P 框架,但它还没有运行。

编辑

还有一种我称之为快速而肮脏的 UDP 解决方案(毕竟它不是那么肮脏,我应该称之为最小化)。

    只需使用公共地址实现一台服务器并开始侦听 UPD。 位于 NAT 后面的对等方与服务器联系,服务器可以从收到的数据报中读取其私有 IP 地址是如何转换为公共 IP 地址的。 您将该信息发送回对等方,后者可以将其转发给其他对等方。服务器还可以帮助在对等点之间交换这些信息。 然后,对等方可以通过向这些已转换地址发送数据报直接(一对一)通信。

简单、易于实施,但不包括丢失数据报、重放、乱序等...(即 TCP 在 IP 堆栈级别为您解决的典型问题)。

【讨论】:

感谢您的回答!我不会立即将其标记为已接受,因为我想为这个问题提供赏金以尽可能多地关注它。顺便说一句,对于如何实现一个分散的、基于 p2p 的类似 reddit 的系统,您有什么 cmets / 建议吗? 你想要实现的和FreeNet差不多,所以我来看看它的灵感。 不,我想做的和freenet很不一样。 Freenet 基本上是网络的匿名版本。我不太关心匿名性。我的目标是让人们以分散的方式在这些链接上交换链接和 cmets。 我的意思是,当涉及到底层架构(不是用户所看到的或应用程序提供的功能)时,您应该将通信级别与应用程序级别分开,这就是 Freenet达到。您可以跳过匿名部分。 自己用过JXTA,可以推荐一下:)【参考方案2】:

我还没有机会使用它,但Telehash 似乎是为这种应用程序而设计的。 Peer2Peer 应用程序在处理防火墙限制方面面临着特殊挑战……由于 Telehash 基于 UDP,它非常适合 hole-punching 通过防火墙。

编辑 static_rtti 的评论

如果代码速度是一个要求,libjingle 需要付出很多努力,但主要是针对XMPP。您可以移植部分ICE 代码,至少可以打孔。有关其实施的详细信息,请参阅libjingle architecture overview。

【讨论】:

看起来不错,感谢您的回答!有时间我会再调查一下。 @static_rtti,我在上面回复了。【参考方案3】:

查看 CouchDB。它是一个使用 HTTP API 的去中心化网络应用平台。人们已经使用它来创建“CouchApps”,它们是分散的基于 CouchDB 的应用程序,可以病毒式传播到其他 CouchDB 服务器。编写 CouchApps 只需要知道 javascript 并学习 CouchDB API。您可以阅读这本免费的在线书籍以了解更多信息:http://guide.couchdb.org

CouchDB 的秘诀是 Master-to-Master 复制协议,它可以让信息像病毒一样传播。当我参加第一次 CouchConf 时,他们通过举办“Couch Party”展示了这是多么有效(在这种情况下,你可以让一个房间里的人复制到他们旁边的人,模拟一个 ad hoc 网络)。

此外,使 CouchApp 工作的所有代码默认情况下在称为设计文档的特殊实体中是公开的。

附:我一直在考虑做一个类似的项目,但目前我没有太多时间投入到它上面。上帝加快我的孩子!

【讨论】:

谢谢,我一定会调查的。 没问题!如果您有任何问题随时问。我真的认为这是去中心化网站的理想解决方案。此外,还有可以嵌入到 androidios 应用程序中的 CouchDB 移动版本,这样您就可以随身携带网站。最后一件事,我强烈推荐这个关于 CouchDB 的“地面计算”的 Google 技术讲座:googlecode.blogspot.com/2009/09/…

以上是关于我想使用 P2P 构建一个去中心化的、类似 reddit 的系统。我应该基于啥现有的 p2p 库?的主要内容,如果未能解决你的问题,请参考以下文章

以太坊开发DApp实战教程——用区块链星际文件系统(IPFS)Node.js和MongoDB来构建电商平台

为什么需要 libp2p-rs ?

为什么需要 libp2p-rs ?

以太坊简介

BLOCKCHAIN 区块链的去中心化P2P服务的JAVA代码的实现

B站直播中HLS和去中心化P2P的实际应用