Documentation
¶
Index ¶
- Variables
- type AddrsFactory
- type BasicHost
- func (h *BasicHost) Addrs() []ma.Multiaddr
- func (h *BasicHost) AllAddrs() []ma.Multiaddr
- func (h *BasicHost) Close() error
- func (h *BasicHost) ConnManager() connmgr.ConnManager
- func (h *BasicHost) Connect(ctx context.Context, pi peer.AddrInfo) error
- func (h *BasicHost) EventBus() event.Bus
- func (h *BasicHost) GetAutoNat() autonat.AutoNAT
- func (h *BasicHost) ID() peer.ID
- func (h *BasicHost) IDService() identify.IDService
- func (h *BasicHost) Mux() protocol.Switch
- func (h *BasicHost) Network() network.Network
- func (h *BasicHost) NewStream(ctx context.Context, p peer.ID, pids ...protocol.ID) (str network.Stream, strErr error)
- func (h *BasicHost) NormalizeMultiaddr(addr ma.Multiaddr) ma.Multiaddr
- func (h *BasicHost) Peerstore() peerstore.Peerstore
- func (h *BasicHost) RemoveStreamHandler(pid protocol.ID)
- func (h *BasicHost) SetAutoNat(a autonat.AutoNAT)
- func (h *BasicHost) SetStreamHandler(pid protocol.ID, handler network.StreamHandler)
- func (h *BasicHost) SetStreamHandlerMatch(pid protocol.ID, m func(protocol.ID) bool, handler network.StreamHandler)
- func (h *BasicHost) SignalAddressChange()
- func (h *BasicHost) Start()
- type HostOpts
- type NATManager
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type AddrsFactory ¶
AddrsFactory 函数可以传递给New来覆盖Addrs返回的地址
type BasicHost ¶
type BasicHost struct {
AddrsFactory AddrsFactory // 地址工厂
// contains filtered or unexported fields
}
BasicHost 是host.Host接口的基本实现。这个特定的host实现:
- 使用协议多路复用器来复用每个协议的流
- 使用身份服务来发送和接收节点信息
- 使用nat服务来建立NAT端口映射
func NewHost ¶
NewHost 构造一个新的*BasicHost并通过将其流和连接处理程序附加到给定的inet.Network来激活它 参数:
- n: network.Network - 网络接口实例
- opts: *HostOpts - 主机配置选项
返回:
- *BasicHost - 创建的基础主机实例
- error 错误信息
func (*BasicHost) Addrs ¶
Addrs 返回监听地址 输出与 AllAddrs 相同,但经过 AddrsFactory 处理 当与 AutoRelay 一起使用时,如果主机不能公开访问,这将只包含主机的私有地址、中继地址,而没有公共地址 返回:
- []ma.Multiaddr 监听地址列表
func (*BasicHost) ConnManager ¶
func (h *BasicHost) ConnManager() connmgr.ConnManager
ConnManager 返回连接管理器 返回:
- connmgr.ConnManager 连接管理器接口
func (*BasicHost) Connect ¶
Connect 确保本主机与给定对等节点ID之间存在连接 如果没有活动连接,Connect将调用h.Network.Dial,并阻塞直到连接建立或返回错误 Connect会将pi中的地址吸收到其内部对等存储中 它还将解析所有/dns4、/dns6和/dnsaddr地址 参数:
- ctx: context.Context 上下文
- pi: peer.AddrInfo 对等节点信息
返回:
- error 错误信息
func (*BasicHost) GetAutoNat ¶
GetAutoNat 返回主机的 AutoNAT 服务(如果启用了 AutoNAT) 返回:
- autonat.AutoNAT AutoNAT 服务实例
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 ¶
NormalizeMultiaddr 返回适合进行相等性检查的多地址 如果多地址是 webtransport 组件,它会移除证书哈希 参数:
- addr: ma.Multiaddr 需要规范化的多地址
返回:
- ma.Multiaddr 规范化后的多地址
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 通知主机需要检查监听地址是否最近发生变化 警告: 此接口不稳定,可能在未来版本中移除
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 是libp2p连接管理器,用于管理与其他节点的连接
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 管理器实例