go-libp2p简明教程

从零开始,手把手带你构建 P2P 网络应用,本文由claude code编写

1. 核心概念扫盲

在写代码之前,先花 5 分钟理解几个关键词。这些概念会贯穿整个教程。

PeerID —— 节点的"身份证"

每个 libp2p 节点在启动时都会生成(或加载)一对密钥(默认是 Ed25519)。PeerID 就是公钥的哈希值,是全网唯一的节点标识。

QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N

Multiaddr —— 节点的"地址簿"

传统 TCP 地址长这样:192.168.1.1:4001。libp2p 的多地址(Multiaddr)更丰富,包含了协议栈信息:

/ip4/192.168.1.1/tcp/4001/p2p/QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N
└─────────────┘ └────────┘  └─────────────────────────────────────────────────────┘
    IP 地址      TCP 端口                       PeerID

也可以是:

  • /ip4/0.0.0.0/tcp/0 —— 随机端口的 TCP
  • /ip4/0.0.0.0/udp/0/quic-v1 —— QUIC 协议
  • /dns4/example.com/tcp/443/wss —— WebSocket over TLS

Host —— 你的节点实例

host.Host 是 libp2p 的核心对象,可以理解为"这台机器在 P2P 网络中的代理"。所有操作都从它出发:监听连接、发起连接、注册协议处理器等。

Stream —— 连接上的"通道"

两个节点建立连接后,可以在同一条底层连接上开多条流(Stream),每条流对应一个协议(类似 HTTP/2 的多路复用)。

Protocol ID —— 协议的"频道号"

每条流都有一个协议 ID,是一个字符串,用于标识通信双方在"聊什么话题":

const MyProtocol = "/myapp/greet/1.0.0"

连接协议的选择机制

libp2p 建立连接时涉及两层协议协商,理解这个对调试和性能优化很有帮助。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论