4 个版本 (2 个破坏性版本)
0.3.0 | 2021年4月23日 |
---|---|
0.2.2 | 2021年3月2日 |
0.2.1 | 2021年1月26日 |
0.1.0 | 2021年1月14日 |
在 #remote-peer 中排名 6
每月下载量 25
用于 libp2p-rs
720KB
13K SLoC
libp2prs-kad
rust-libp2p和go-libp2p之间kad实现的比较
Kbuckets,又称路由表
go
-
桶根据需要扩展
-
无multiaddr,依赖于peerstore
-
插入
- 初始化,用所有已连接的节点填充kbuckets
- 修复低节点
- 当远程节点向我们发送RPC时
- 当我们迭代查询远程节点并成功时
// TryAddPeer尝试将节点添加到路由表。// 如果节点已在路由表中且之前已查询过,此调用为空操作。// 如果节点已在路由表中但之前未查询过,我们将它的LastUsefulAt值设置为当前时间。这需要完成,因为我们第一次连接到它们时不会标记节点为"有用的"(通过设置LastUsefulAt值)。// // 如果节点是一个queryPeer,即我们查询过它或它查询过我们,我们将LastSuccessfulOutboundQuery设置为当前时间。// 如果节点只是一个我们连接到/它连接到我们而没有任何DHT查询的节点,我们将其视为没有LastSuccessfulOutboundQuery。// // // 如果节点所属的逻辑桶已满且不是最后一个桶,我们尝试用一个新节点替换该桶中LastSuccessfulOutboundQuery超过最大允许阈值的现有节点。如果在那个桶中没有这样的节点,我们不会将节点添加到路由表,并返回错误"ErrPeerRejectedNoCapacity"。
返回一个布尔值,如果对等方是新添加到路由表的,则设置为true,否则为false。// 它还返回在对等方添加到路由表过程中发生的任何错误。如果错误不是nil,// 布尔值将始终为false,即如果对等方不在路由表中,则不会将其添加到路由表。// // 返回值为false且error=nil表示该对等方已在路由表中。
-
删除
- 当发现远程对等方未对出站查询做出响应时
- 刷新管理器:无法连接到远程对等方
- handlePeerChangeEvent:远程被认为不符合Kad对等方标准
Rust
- 所有桶在开始时都初始化
- kbuckets中嵌入multiaddr
- 插入:当与远程对等方确认Kad协议时 -> 内部/外部协议升级完成
- 如果空间足够,则插入,否则挂起
- KademliaBucketInserts决定如何插入:OnConnected或手动
- 如果对等方已在RT中或挂起,则更新地址和状态
- 如果空间足够,则插入,否则挂起
- 删除:仅手动
- 更新:当发现对等方已断开连接时
- 始终更新地址和状态
- NoeStatus:影响如何将新对等方插入RT
依赖项
~20–33MB
~619K SLoC