2 个不稳定版本
| 0.7.0 | 2019年5月4日 |
|---|---|
| 0.6.0 | 2019年5月4日 |
#15 in #susyp2p
用于 susyp2p
665KB
12K SLoC
实现 /ipfs/id/1.0.0 协议。允许节点 A 查询节点 B 关于 A 的信息。还包括 B 监听的地址。
当两个节点相互连接时,监听半部分向拨号半部分发送消息,表示信息,然后协议停止。
用法
提供低级和高级用法。
通过 IdentifyTransport 结构体进行高级使用
此包提供了 IdentifyTransport 结构体,它包装了一个 Transport 和一个 Peerstore 的实现。 IdentifyTransport 自身是一个传输,接受 /p2p/... 或 /ipfs/... 格式的多地址。
注意:所有文档都引用
/p2p/...,但是也支持/ipfs/...。
如果您拨号 /p2p/... 格式的多地址,则 IdentifyTransport 将在 Peerstore 中查找该对等体的任何已知多地址,并尝试使用底层传输拨号它们。如果您拨号任何其他多地址,则它将使用底层传输拨号该多地址,然后与远程进行 identify 协议协商以获取其 ID,然后将它添加到 peerstore 中,最后再次拨号相同的多地址并返回连接。
监听不支持 /p2p/... 格式的多地址(因为这没有意义)。传递给 listen_on 的任何地址将直接传递到底层传输。
每当远程连接到我们时,无论是通过监听还是通过 next_incoming,IdentifyTransport 都将回拨远程,将连接升级到 identify 协议以获取远程的 ID,将信息存储在 peerstore 中,最后只返回连接。从外部看,远程的多地址格式为 /p2p/...。如果远程不支持 identify 协议,则关闭套接字。
由于 IdentifyProtocol 的行为,建议在 ConnectionReuse 上构建它。
通过 IdentifyProtocolConfig 结构体进行低级使用
IdentifyProtocolConfig 结构体实现了 ConnectionUpgrade 特性。使用它将协商 identify 协议。
升级的输出是一个 IdentifyOutput。如果我们是拨号者,那么 IdentifyOutput 将包含远程发送的信息。如果我们是监听者,那么它将包含一个可以用来将信息回传给远程的 IdentifySender 结构体。
依赖项
~10MB
~188K SLoC