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 建立连接时涉及两层协议协商,理解这个对调试和性能优化很有帮助。
评论
?
参与讨论