basichost

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: 38 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// 协议协商超时的默认值
	DefaultNegotiationTimeout = 10 * time.Second

	// 地址工厂的默认值
	DefaultAddrsFactory = func(addrs []ma.Multiaddr) []ma.Multiaddr { return addrs }
)

Functions

This section is empty.

Types

type AddrsFactory

type AddrsFactory func([]ma.Multiaddr) []ma.Multiaddr

AddrsFactory 函数可以传递给New来覆盖Addrs返回的地址

type BasicHost

type BasicHost struct {
	AddrsFactory AddrsFactory // 地址工厂
	// contains filtered or unexported fields
}

BasicHost 是host.Host接口的基本实现。这个特定的host实现:

  • 使用协议多路复用器来复用每个协议的流
  • 使用身份服务来发送和接收节点信息
  • 使用nat服务来建立NAT端口映射

func NewHost

func NewHost(n network.Network, opts *HostOpts) (*BasicHost, error)

NewHost 构造一个新的*BasicHost并通过将其流和连接处理程序附加到给定的inet.Network来激活它 参数:

  • n: network.Network - 网络接口实例
  • opts: *HostOpts - 主机配置选项

返回:

  • *BasicHost - 创建的基础主机实例
  • error 错误信息

func (*BasicHost) Addrs

func (h *BasicHost) Addrs() []ma.Multiaddr

Addrs 返回监听地址 输出与 AllAddrs 相同,但经过 AddrsFactory 处理 当与 AutoRelay 一起使用时,如果主机不能公开访问,这将只包含主机的私有地址、中继地址,而没有公共地址 返回:

  • []ma.Multiaddr 监听地址列表

func (*BasicHost) AllAddrs

func (h *BasicHost) AllAddrs() []ma.Multiaddr

AllAddrs 返回主机正在监听的所有地址,除了电路地址 返回:

  • []ma.Multiaddr 所有监听地址列表

func (*BasicHost) Close

func (h *BasicHost) Close() error

Close 关闭主机的服务(网络等) 返回:

  • error 关闭过程中的错误

func (*BasicHost) ConnManager

func (h *BasicHost) ConnManager() connmgr.ConnManager

ConnManager 返回连接管理器 返回:

  • connmgr.ConnManager 连接管理器接口

func (*BasicHost) Connect

func (h *BasicHost) Connect(ctx context.Context, pi peer.AddrInfo) error

Connect 确保本主机与给定对等节点ID之间存在连接 如果没有活动连接,Connect将调用h.Network.Dial,并阻塞直到连接建立或返回错误 Connect会将pi中的地址吸收到其内部对等存储中 它还将解析所有/dns4、/dns6和/dnsaddr地址 参数:

  • ctx: context.Context 上下文
  • pi: peer.AddrInfo 对等节点信息

返回:

  • error 错误信息

func (*BasicHost) EventBus

func (h *BasicHost) EventBus() event.Bus

EventBus 返回事件总线 返回:

  • event.Bus 事件总线

func (*BasicHost) GetAutoNat

func (h *BasicHost) GetAutoNat() autonat.AutoNAT

GetAutoNat 返回主机的 AutoNAT 服务(如果启用了 AutoNAT) 返回:

  • autonat.AutoNAT AutoNAT 服务实例

func (*BasicHost) ID

func (h *BasicHost) ID() peer.ID

ID 返回与此主机关联的(本地)对等点ID 返回:

  • peer.ID 本地对等点ID

func (*BasicHost) IDService

func (h *BasicHost) IDService() identify.IDService

IDService 返回身份识别服务 返回:

  • identify.IDService 身份识别服务

func (*BasicHost) Mux

func (h *BasicHost) Mux() protocol.Switch

Mux 返回用于将传入流多路复用到协议处理程序的多路复用器 返回:

  • protocol.Switch 协议多路复用器

func (*BasicHost) Network

func (h *BasicHost) Network() network.Network

Network 返回主机的网络接口 返回:

  • network.Network 网络接口

func (*BasicHost) NewStream

func (h *BasicHost) NewStream(ctx context.Context, p peer.ID, pids ...protocol.ID) (str network.Stream, strErr error)

NewStream 打开到给定对等点p的新流,并使用给定的协议ID写入p2p/协议头 如果没有到p的连接,则尝试创建一个。如果ProtocolID为"",则不写入头 (线程安全) 参数:

  • ctx: context.Context 上下文
  • p: peer.ID 目标对等点ID
  • pids: ...protocol.ID 协议ID列表

返回:

  • network.Stream 新建的流
  • error 错误信息

func (*BasicHost) NormalizeMultiaddr

func (h *BasicHost) NormalizeMultiaddr(addr ma.Multiaddr) ma.Multiaddr

NormalizeMultiaddr 返回适合进行相等性检查的多地址 如果多地址是 webtransport 组件,它会移除证书哈希 参数:

  • addr: ma.Multiaddr 需要规范化的多地址

返回:

  • ma.Multiaddr 规范化后的多地址

func (*BasicHost) Peerstore

func (h *BasicHost) Peerstore() peerstore.Peerstore

Peerstore 返回主机的对等点地址和密钥存储库 返回:

  • peerstore.Peerstore 对等点存储库

func (*BasicHost) RemoveStreamHandler

func (h *BasicHost) RemoveStreamHandler(pid protocol.ID)

RemoveStreamHandler 移除流处理程序 参数:

  • pid: protocol.ID 要移除的协议ID

func (*BasicHost) SetAutoNat

func (h *BasicHost) SetAutoNat(a autonat.AutoNAT)

SetAutoNat 设置主机的 autonat 服务 参数:

  • a: autonat.AutoNAT autonat 服务实例

func (*BasicHost) SetStreamHandler

func (h *BasicHost) SetStreamHandler(pid protocol.ID, handler network.StreamHandler)

SetStreamHandler 在主机的多路复用器上设置协议处理程序 等同于: host.Mux().SetHandler(proto, handler) (线程安全) 参数:

  • pid: protocol.ID 协议ID
  • handler: network.StreamHandler 流处理程序

func (*BasicHost) SetStreamHandlerMatch

func (h *BasicHost) SetStreamHandlerMatch(pid protocol.ID, m func(protocol.ID) bool, handler network.StreamHandler)

SetStreamHandlerMatch 使用匹配函数在主机的多路复用器上设置协议处理程序 参数:

  • pid: protocol.ID 协议ID
  • m: func(protocol.ID) bool 协议匹配函数
  • handler: network.StreamHandler 流处理程序

func (*BasicHost) SignalAddressChange

func (h *BasicHost) SignalAddressChange()

SignalAddressChange 通知主机需要检查监听地址是否最近发生变化 警告: 此接口不稳定,可能在未来版本中移除

func (*BasicHost) Start

func (h *BasicHost) Start()

Start 启动主机中的后台任务 启动 PSManager、增加引用计数、启动 ID 服务、启动 autonat 服务(如果存在)、启动后台任务

type HostOpts

type HostOpts struct {
	// EventBus 设置事件总线。如果省略将构造新的事件总线
	EventBus event.Bus

	// MultistreamMuxer 对BasicHost来说是必需的,如果省略将使用合理的默认值
	MultistreamMuxer *msmux.MultistreamMuxer[protocol.ID]

	// NegotiationTimeout 决定协商流协议时的读写超时。
	// 如果为0或省略,将使用DefaultNegotiationTimeout。
	// 如果小于0,将停用流的超时。
	NegotiationTimeout time.Duration

	// AddrsFactory 持有一个可用于覆盖或过滤Addrs结果的函数。
	// 如果省略,则没有覆盖或过滤,Addrs和AllAddrs的结果相同。
	AddrsFactory AddrsFactory

	// NATManager 负责设置NAT端口映射和发现外部地址。
	// 如果省略,这个功能将被禁用。
	NATManager func(network.Network) NATManager

	// ConnManager 是dep2p连接管理器,用于管理与其他节点的连接
	ConnManager connmgr.ConnManager

	// EnablePing 指示是否实例化ping服务,用于检测节点之间的连通性
	EnablePing bool

	// EnableRelayService 启用circuit v2中继(如果我们可以公开访问)
	// 中继服务允许不能直接连接的节点通过中继节点进行通信
	EnableRelayService bool

	// RelayServiceOpts 是circuit v2中继的选项,用于配置中继服务的行为
	RelayServiceOpts []relayv2.Option

	// UserAgent 设置主机的用户代理字符串,用于标识节点的客户端软件
	UserAgent string

	// ProtocolVersion 设置主机的协议版本,用于确保节点间协议的兼容性
	ProtocolVersion string

	// DisableSignedPeerRecord 在此主机上禁用签名对等节点记录的生成
	// 签名对等节点记录用于验证节点身份和地址信息的真实性
	DisableSignedPeerRecord bool

	// EnableHolePunching 使对等节点能够发起/响应NAT穿透的打洞尝试
	// 打洞技术用于帮助位于NAT后的节点建立直接连接
	EnableHolePunching bool

	// HolePunchingOptions 是打洞服务的选项,用于配置NAT穿透的行为
	HolePunchingOptions []holepunch.Option

	// EnableMetrics 启用指标子系统,用于收集和导出各种性能和行为指标
	EnableMetrics bool

	// PrometheusRegisterer 是用于指标的Prometheus注册器
	// 用于将收集的指标注册到Prometheus监控系统
	PrometheusRegisterer prometheus.Registerer

	// DisableIdentifyAddressDiscovery 禁用使用对等节点在identify中提供的观察地址进行地址发现
	// 地址发现用于了解节点在网络中的可见地址
	DisableIdentifyAddressDiscovery bool

	// EnableAutoNATv2 启用自动NAT检测和穿透的第二版本
	EnableAutoNATv2 bool

	// AutoNATv2Dialer 是用于AutoNATv2服务的拨号器主机
	// 用于执行NAT类型检测和地址可达性测试
	AutoNATv2Dialer host.Host
}

HostOpts 包含可以传递给NewHost的选项,用于自定义BasicHost的构建

type NATManager

type NATManager interface {
	// GetMapping 获取给定多地址的 NAT 映射地址
	// 参数:
	//   - ma.Multiaddr 原始多地址
	// 返回:
	//   - ma.Multiaddr NAT 映射后的多地址
	GetMapping(ma.Multiaddr) ma.Multiaddr

	// HasDiscoveredNAT 检查是否已发现 NAT 设备
	// 返回:
	//   - bool 是否发现 NAT 设备
	HasDiscoveredNAT() bool

	// Close 关闭 NAT 管理器
	// 返回:
	//   - error 关闭过程中的错误
	io.Closer
}

NATManager 是一个管理 NAT 设备的简单接口。 它监听来自 network.Network 的 Listen 和 ListenClose 通知,并尝试为这些通知获取端口映射。

func NewNATManager

func NewNATManager(net network.Network) NATManager

NewNATManager 创建一个 NAT 管理器。 参数:

  • net: network.Network 网络实例

返回:

  • NATManager NAT 管理器实例

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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