有一个问题我找不到解决方案:
如何识别纯对等系统中都运行相同应用程序 Foobar 的节点?
在上图中,我们假设所有节点都运行同一个基于纯对等网络的应用程序。
注意:我在 Java 中标记了这个,因为这是我想要使用的语言。而不是引用已经这样做的库的名称,请解释我如何进行搜索的算法/方式。我想了很多但不知道如何进行搜索?为了了解什么是纯 p2p 系统,我想编写一个基于反映纯 p2p 系统的小应用程序。它可以是一个简单的聊天应用程序。
有一个问题我找不到解决方案:
如何识别纯对等系统中都运行相同应用程序 Foobar 的节点?
在上图中,我们假设所有节点都运行同一个基于纯对等网络的应用程序。
注意:我在 Java 中标记了这个,因为这是我想要使用的语言。而不是引用已经这样做的库的名称,请解释我如何进行搜索的算法/方式。我想了很多但不知道如何进行搜索?为了了解什么是纯 p2p 系统,我想编写一个基于反映纯 p2p 系统的小应用程序。它可以是一个简单的聊天应用程序。
如果您询问如何找到节点,那么这就是目录服务的用途 - 节点在这些服务器上注册自己。
如果您询问应如何命名节点 - GUID 可以正常工作,或者您可以再次使用目录服务进行命名。
如上所述,目录服务在种子网络等 p2p 网络中很受欢迎。
对于更“纯”的 p2p,您可以阅读有关Gnutella项目的信息。
...在初始启动时,客户端软件必须引导并找到至少一个其他节点。为此使用了各种方法,包括软件附带的可能工作节点的预先存在的地址列表、使用已知节点的更新 Web 缓存(称为 Gnutella Web 缓存)、UDP 主机缓存,甚至很少使用 IRC。
其他一些解决方案可能涉及同一网络 p2p 的多播
这取决于您的应用程序的规模。在 LAN 上,这很简单:您广播您的存在(通常通过预先确定的多播地址)。
在更大的 Internet 上,路由器会阻止广播和多播流量,因此无法宣布您的存在。相反,您需要至少一个对等点作为种子,以发现其他对等点。随着每个对等方了解其他人,它与他们交换知识。