#p2p #susyp2p #networking

susyp2p-identify

susyp2p 节点标识协议

2 个不稳定版本

0.7.0 2019年5月4日
0.6.0 2019年5月4日

#15 in #susyp2p


用于 susyp2p

MIT 许可证

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_incomingIdentifyTransport 都将回拨远程,将连接升级到 identify 协议以获取远程的 ID,将信息存储在 peerstore 中,最后只返回连接。从外部看,远程的多地址格式为 /p2p/...。如果远程不支持 identify 协议,则关闭套接字。

由于 IdentifyProtocol 的行为,建议在 ConnectionReuse 上构建它。

通过 IdentifyProtocolConfig 结构体进行低级使用

IdentifyProtocolConfig 结构体实现了 ConnectionUpgrade 特性。使用它将协商 identify 协议。

升级的输出是一个 IdentifyOutput。如果我们是拨号者,那么 IdentifyOutput 将包含远程发送的信息。如果我们是监听者,那么它将包含一个可以用来将信息回传给远程的 IdentifySender 结构体。

依赖项

~10MB
~188K SLoC