在前面的文章中,我们说过,DHT(分布式哈希表)是 IPFS 一个重要的组成部分,接下来我们会分别从应用,原理两个方面来分析 DHT。
IPFS 的网络层源码在 libp2p 中,本文用 go-libp2p 做分析。
我们假设一个场景应用,有两个节点名字分别叫 earth 和 mars,然后他们分别加入了 DHT 网络,接下来他们需要找到对方,并能够互相发送消息。
(一)初始化节点
首先我们需要初始化节点
ctx := context.Background()
listenAddresses, _ := multiaddr.NewMultiaddr("/ip4/127.0.0.1/tcp/8004")
host, _ := libp2p.New(ctx, libp2p.ListenAddrs([]multiaddr.Multiaddr{
listenAddresses}...))
fmt.Println("host->", host.ID())
其实初始化就一行 libp2p.New()
,可自定义参数,比如上面我们定义了监听地址和端口 /ip4/127.0.0.1/tcp/8004
,