出于个人好奇心,我目前正在学习区块链的工作原理。我正在学习这门课程,现在我已经使用web套接字设置了点对点连接。区块链应用程序的多个实例现在可以使用这些套接字运行和相互通信。
课程实现的一个缺点是实例如何知道如何找到彼此。从本质上讲,它们需要显式配置才能通信。在我当前的项目中,我设置了3个实例。其中一个在端口5001上打开一个套接字,并且不连接到其他任何端口。另一个在端口5002上打开一个套接字,并连接到5001上的实例。第三个在端口5003上打开一个套接字,并连接到5002和5001上的实例。
重点是,所有这三个都是这样明确配置的。所有三个都必须完全按照这个顺序启动,这样它们才能正确地连接到其他三个。虽然这对于实践实现来说是很好的,但我知道这不是真正的区块链实现必须在野外工作的方式。必须有某种发生的发现机制,允许这些实例中的任何一个找到当前正在运行的任何其他实例。
网络不是我的专业领域,所以我对如何做到这一点感到困惑。
发布于 2021-11-05 23:18:56
P2P加密货币客户端通常具有对等项的硬编码列表。这些同级由社区管理。如果你第一次启动你的客户端,这些节点就是你的全部。
当您连接到另一个节点时,它会将您的IP保存在内部列表中。任何节点都可以从另一个节点请求此列表。通过这种方式,您的客户端可以发现其他节点。客户端应用程序将节点列表保存到磁盘。在下一次启动时,您将拥有硬编码的节点和上次连接的节点。某些节点可能处于脱机状态,但这是可以接受的。
更详细的比特币解释:https://developer.bitcoin.org/devguide/p2p_network.html#peer-discovery
https://stackoverflow.com/questions/69852475
复制相似问题