Documentation ¶
Index ¶
- Variables
- func GetPublicKey(r ValueStore, ctx context.Context, p peer.ID) (ci.PubKey, error)
- func KeyForPublicKey(id peer.ID) string
- func PublishQueryEvent(ctx context.Context, ev *QueryEvent)
- func RegisterForQueryEvents(ctx context.Context) (context.Context, <-chan *QueryEvent)
- func SubscribesToQueryEvents(ctx context.Context) bool
- type ContentDiscovery
- type ContentProviding
- type ContentRouting
- type Option
- type Options
- type PeerRouting
- type PubKeyFetcher
- type QueryEvent
- type QueryEventType
- type Routing
- type ValueStore
Constants ¶
This section is empty.
Variables ¶
var ErrNotFound = errors.New("路由: 未找到")
ErrNotFound 当路由器找不到请求的记录时返回此错误
var ErrNotSupported = errors.New("路由: 不支持的操作或密钥")
ErrNotSupported 当路由器不支持给定的记录类型或操作时返回此错误
var QueryEventBufferSize = 16
QueryEventBufferSize 定义事件缓冲区大小
Functions ¶
func GetPublicKey ¶
GetPublicKey 从值存储中检索与给定对等节点 ID 关联的公钥 参数:
- r: ValueStore 值存储接口
- ctx: context.Context 用于控制操作的上下文
- p: peer.ID 要获取公钥的对等节点 ID
返回值:
- ci.PubKey: 获取到的公钥
- error: 如果发生错误,返回错误信息
func KeyForPublicKey ¶
KeyForPublicKey 返回用于从值存储中检索公钥的键 参数:
- id: peer.ID 对等节点 ID
返回值:
- string: 用于检索公钥的键
func PublishQueryEvent ¶
func PublishQueryEvent(ctx context.Context, ev *QueryEvent)
PublishQueryEvent 将查询事件发布到与给定context关联的查询事件通道(如果存在) 参数:
- ctx: context.Context 包含事件通道的context
- ev: *QueryEvent 要发布的查询事件
返回值:
- 无
func RegisterForQueryEvents ¶
func RegisterForQueryEvents(ctx context.Context) (context.Context, <-chan *QueryEvent)
RegisterForQueryEvents 使用给定的context注册查询事件通道 返回的context可以传递给DHT查询以在返回的通道上接收查询事件 参数:
- ctx: context.Context 用于控制事件通道的生命周期
返回值:
- context.Context: 包含事件通道的新context
- <-chan *QueryEvent: 用于接收查询事件的通道
func SubscribesToQueryEvents ¶
SubscribesToQueryEvents 检查context是否订阅了查询事件 如果此函数返回false,则在该context上调用PublishQueryEvent将不执行任何操作 参数:
- ctx: context.Context 要检查的context
返回值:
- bool: 如果context订阅了查询事件则返回true,否则返回false
Types ¶
type ContentDiscovery ¶
type ContentDiscovery interface { // FindProvidersAsync 异步搜索能够提供给定密钥的对等节点 // 参数: // - ctx: context.Context 用于控制操作的上下文 // - c: cid.Cid 要查找的内容标识符 // - count: int 要返回的最大结果数,0 表示不限制 // // 返回值: // - <-chan peer.AddrInfo: 返回提供者地址信息的通道 FindProvidersAsync(context.Context, cid.Cid, int) <-chan peer.AddrInfo }
ContentDiscovery 定义了使用路由系统检索内容提供者的能力
type ContentProviding ¶
type ContentProviding interface { // Provide 将给定的 CID 添加到内容路由系统中 // 参数: // - ctx: context.Context 用于控制操作的上下文 // - c: cid.Cid 要提供的内容标识符 // - announce: bool 如果为 true 则同时宣告内容,否则仅在本地记录 // // 返回值: // - error: 如果发生错误,返回错误信息 Provide(context.Context, cid.Cid, bool) error }
ContentProviding 定义了在路由系统中宣告内容位置的能力
type ContentRouting ¶
type ContentRouting interface { ContentProviding ContentDiscovery }
ContentRouting 是一个内容提供者的间接层,用于查找谁拥有什么内容 内容通过 CID(内容标识符)标识,它以面向未来的方式对标识内容的哈希进行编码
type Option ¶
Option 是一个函数类型,用于修改 Options 结构体的选项 参数:
- opts: *Options 需要修改的选项对象
返回值:
- error: 如果发生错误,返回错误信息
Expired 是一个选项,用于告诉路由系统在没有更新记录时返回过期记录
type Options ¶
type Options struct { // Expired 允许返回过期的值 Expired bool // Offline 表示是否离线运行 Offline bool // Other 存储其他特定于 ValueStore 实现的选项 Other map[interface{}]interface{} }
Options 定义了路由系统的配置选项集合
type PeerRouting ¶
type PeerRouting interface { // FindPeer 搜索具有给定 ID 的对等节点 // 参数: // - ctx: context.Context 用于控制操作的上下文 // - id: peer.ID 要查找的对等节点 ID // // 返回值: // - peer.AddrInfo: 包含相关地址的对等节点信息 // - error: 如果发生错误,返回错误信息 FindPeer(context.Context, peer.ID) (peer.AddrInfo, error) }
PeerRouting 定义了查找特定对等节点地址信息的方法 可以通过简单的查找表、跟踪服务器甚至 DHT 来实现
type PubKeyFetcher ¶
type PubKeyFetcher interface { // GetPublicKey 返回给定对等节点的公钥 // 参数: // - ctx: context.Context 用于控制操作的上下文 // - id: peer.ID 要获取公钥的对等节点 ID // // 返回值: // - ci.PubKey: 获取到的公钥 // - error: 如果发生错误,返回错误信息 GetPublicKey(context.Context, peer.ID) (ci.PubKey, error) }
PubKeyFetcher 是一个应该由可以优化公钥检索的值存储实现的接口
type QueryEvent ¶
type QueryEvent struct { // ID 表示与事件相关的节点标识符 ID peer.ID // Type 表示事件类型 Type QueryEventType // Responses 包含对等节点的地址信息列表 Responses []*peer.AddrInfo // Extra 包含额外的事件相关信息 Extra string }
QueryEvent 表示在 DHT 查询过程中发生的每个重要事件 包含事件相关的节点ID、类型、响应和额外信息
func (*QueryEvent) MarshalJSON ¶
func (qe *QueryEvent) MarshalJSON() ([]byte, error)
MarshalJSON 将 QueryEvent 对象序列化为 JSON 字节数组 返回值:
- []byte: 序列化后的 JSON 字节数组
- error: 如果序列化过程中发生错误,返回错误信息
func (*QueryEvent) UnmarshalJSON ¶
func (qe *QueryEvent) UnmarshalJSON(b []byte) error
UnmarshalJSON 从 JSON 字节数组反序列化得到 QueryEvent 对象 参数:
- b: []byte JSON 格式的字节数组
返回值:
- error: 如果反序列化过程中发生错误,返回错误信息
type QueryEventType ¶
type QueryEventType int
QueryEventType 表示查询事件的类型
const ( // SendingQuery 表示正在向对等节点发送查询 SendingQuery QueryEventType = iota // PeerResponse 表示收到对等节点的响应 PeerResponse // FinalPeer 表示找到"最近"的对等节点(当前未使用) FinalPeer // QueryError 表示查询过程中发生错误 QueryError // Provider 表示找到了提供者 Provider // Value 表示找到了值 Value // AddingPeer 表示正在添加对等节点到查询 AddingPeer // DialingPeer 表示正在与对等节点建立连接 DialingPeer )
定义查询事件类型常量
type Routing ¶
type Routing interface { ContentRouting PeerRouting ValueStore // Bootstrap 允许调用者提示路由系统进入并保持引导状态 // 这不是同步调用 // 参数: // - ctx: context.Context 用于控制操作的上下文 // // 返回值: // - error: 如果发生错误,返回错误信息 Bootstrap(context.Context) error }
Routing 组合了 dep2p 支持的不同路由类型 可以由单个组件(如 DHT)或多个针对每个任务优化的不同组件来满足
type ValueStore ¶
type ValueStore interface { // PutValue 添加与给定键对应的值 // 参数: // - ctx: context.Context 用于控制操作的上下文 // - key: string 存储值的键 // - value: []byte 要存储的值 // - opts: ...Option 可选的存储选项 // // 返回值: // - error: 如果发生错误,返回错误信息 PutValue(context.Context, string, []byte, ...Option) error // GetValue 搜索与给定键对应的值 // 参数: // - ctx: context.Context 用于控制操作的上下文 // - key: string 要查找的键 // - opts: ...Option 可选的查找选项 // // 返回值: // - []byte: 找到的值 // - error: 如果发生错误,返回错误信息 GetValue(context.Context, string, ...Option) ([]byte, error) // SearchValue 持续搜索与给定键对应的更好值 // 参数: // - ctx: context.Context 用于控制操作的上下文 // - key: string 要搜索的键 // - opts: ...Option 可选的搜索选项 // // 返回值: // - <-chan []byte: 返回找到的值的通道 // - error: 如果发生错误,返回错误信息 SearchValue(context.Context, string, ...Option) (<-chan []byte, error) }
ValueStore 定义了基本的 Put/Get 接口