routing

package
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 22, 2025 License: MIT Imports: 8 Imported by: 6

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNotFound = errors.New("路由: 未找到")

ErrNotFound 当路由器找不到请求的记录时返回此错误

View Source
var ErrNotSupported = errors.New("路由: 不支持的操作或密钥")

ErrNotSupported 当路由器不支持给定的记录类型或操作时返回此错误

View Source
var QueryEventBufferSize = 16

QueryEventBufferSize 定义事件缓冲区大小

Functions

func GetPublicKey

func GetPublicKey(r ValueStore, ctx context.Context, p peer.ID) (ci.PubKey, error)

GetPublicKey 从值存储中检索与给定对等节点 ID 关联的公钥 参数:

  • r: ValueStore 值存储接口
  • ctx: context.Context 用于控制操作的上下文
  • p: peer.ID 要获取公钥的对等节点 ID

返回值:

  • ci.PubKey: 获取到的公钥
  • error: 如果发生错误,返回错误信息

func KeyForPublicKey

func KeyForPublicKey(id peer.ID) string

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

func SubscribesToQueryEvents(ctx context.Context) bool

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

type Option func(opts *Options) error

Option 是一个函数类型,用于修改 Options 结构体的选项 参数:

  • opts: *Options 需要修改的选项对象

返回值:

  • error: 如果发生错误,返回错误信息
var Expired Option = func(opts *Options) error {
	opts.Expired = true
	return nil
}

Expired 是一个选项,用于告诉路由系统在没有更新记录时返回过期记录

var Offline Option = func(opts *Options) error {
	opts.Offline = true
	return nil
}

Offline 是一个选项,用于告诉路由系统以离线模式运行(即仅依赖缓存/本地数据)

type Options

type Options struct {
	// Expired 允许返回过期的值
	Expired bool
	// Offline 表示是否离线运行
	Offline bool
	// Other 存储其他特定于 ValueStore 实现的选项
	Other map[interface{}]interface{}
}

Options 定义了路由系统的配置选项集合

func (*Options) Apply

func (opts *Options) Apply(options ...Option) error

Apply 将给定的选项应用到当前 Options 实例 参数:

  • options: ...Option 要应用的选项列表

返回值:

  • error: 如果应用选项时发生错误,返回错误信息

func (*Options) ToOption

func (opts *Options) ToOption() Option

ToOption 将当前 Options 实例转换为单个 Option 函数 返回值:

  • Option: 返回一个可以复制当前选项的 Option 函数

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 接口

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL