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