client

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

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	StatLimitDuration = statLimitDuration{}
	StatLimitData     = statLimitData{}
)
View Source
var (
	// StreamTimeout 流操作超时时间
	StreamTimeout = 1 * time.Minute
	// AcceptTimeout 接受连接超时时间
	AcceptTimeout = 10 * time.Second
)

连接超时相关常量

View Source
var DialRelayTimeout = 5 * time.Second

中继拨号超时时间

View Source
var DialTimeout = time.Minute

拨号超时时间

View Source
var HopTagWeight = 5

HopTagWeight 是用于携带中继跳跃流的连接管理器权重

View Source
var ReserveTimeout = time.Minute

预留槽位的超时时间为1分钟

Functions

func AddTransport

func AddTransport(h host.Host, upgrader transport.Upgrader) error

AddTransport 构造一个新的 p2p-circuit/v2 客户端并将其作为传输层添加到主机网络中 参数:

  • h: host.Host 主机对象
  • upgrader: transport.Upgrader 传输升级器

返回值:

  • error 如果出现错误则返回错误信息

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client 实现了 p2p-circuit/v2 协议的客户端: - 实现通过 v2 中继进行拨号 - 监听来自 v2 中继的传入连接

为了向后兼容 v1 中继和旧节点,客户端也会接受通过 v1 中继的连接,并使用 p2p-circuit/v1 进行回退拨号。 这允许我们在主机中使用 v2 代码作为 v1 的替代品,而不会破坏现有代码和与旧节点的互操作性。

func New

func New(h host.Host, upgrader transport.Upgrader) (*Client, error)

New 创建一个新的 p2p-circuit/v2 客户端 参数:

  • h: host.Host 主机对象
  • upgrader: transport.Upgrader 连接升级器

返回值:

  • *Client 新创建的客户端对象
  • error 创建过程中的错误

func (*Client) CanDial

func (c *Client) CanDial(addr ma.Multiaddr) bool

CanDial 检查是否可以拨号到指定地址 参数:

  • addr: ma.Multiaddr 要检查的多地址

返回值:

  • bool 如果地址包含中继协议则返回 true

func (*Client) Close

func (c *Client) Close() error

Close 关闭客户端 返回值:

  • error 关闭过程中的错误

注意:

  • 此方法会取消上下文并移除流处理器

func (*Client) Dial

Dial 拨号连接到指定的对等节点 参数:

  • ctx: context.Context 上下文对象
  • a: ma.Multiaddr 目标多地址
  • p: peer.ID 目标对等节点 ID

返回值:

  • transport.CapableConn 建立的传输连接
  • error 如果出现错误则返回错误信息

func (*Client) Listen

func (c *Client) Listen(addr ma.Multiaddr) (transport.Listener, error)

Listen 在指定地址上监听连接 参数:

  • addr: ma.Multiaddr 要监听的多地址

返回值:

  • transport.Listener 传输监听器
  • error 如果出现错误则返回错误信息

func (*Client) Listener

func (c *Client) Listener() *Listener

Listener 返回当前客户端对应的监听器 返回值:

  • *Listener 监听器对象

func (*Client) Protocols

func (c *Client) Protocols() []int

Protocols 返回支持的协议列表 返回值:

  • []int 支持的协议代码列表

func (*Client) Proxy

func (c *Client) Proxy() bool

Proxy 表示这是一个代理传输 返回值:

  • bool 始终返回 true

func (*Client) SkipResolve

func (c *Client) SkipResolve(ctx context.Context, maddr ma.Multiaddr) bool

SkipResolve 总是返回 true,因为我们始终将实际连接委托给内部传输 通过在这里跳过解析,我们让内部传输决定如何解析多地址 参数:

  • ctx: context.Context 上下文对象
  • maddr: ma.Multiaddr 多地址

返回值:

  • bool 始终返回 true

func (*Client) Start

func (c *Client) Start()

Start 注册电路(客户端)协议流处理程序 注意:

  • 此方法会设置 v2 协议的流处理器

type Conn

type Conn struct {
	// contains filtered or unexported fields
}

Conn 表示一个中继连接

func (*Conn) Close

func (c *Conn) Close() error

Close 关闭连接

func (*Conn) LocalAddr

func (c *Conn) LocalAddr() net.Addr

LocalAddr 返回本地网络地址

func (*Conn) LocalMultiaddr

func (c *Conn) LocalMultiaddr() ma.Multiaddr

LocalMultiaddr 返回本地多地址

func (*Conn) Read

func (c *Conn) Read(buf []byte) (int, error)

Read 从连接中读取数据

func (*Conn) RemoteAddr

func (c *Conn) RemoteAddr() net.Addr

RemoteAddr 返回远程网络地址

func (*Conn) RemoteMultiaddr

func (c *Conn) RemoteMultiaddr() ma.Multiaddr

TODO: 将 c.Conn().RemotePeer() 转换为 multiaddr 是否安全?可能是"用户输入"

func (*Conn) SetDeadline

func (c *Conn) SetDeadline(t time.Time) error

SetDeadline 设置读写超时时间

func (*Conn) SetReadDeadline

func (c *Conn) SetReadDeadline(t time.Time) error

SetReadDeadline 设置读取超时时间

func (*Conn) SetWriteDeadline

func (c *Conn) SetWriteDeadline(t time.Time) error

SetWriteDeadline 设置写入超时时间

func (*Conn) Stat

func (c *Conn) Stat() network.ConnStats

Stat 返回连接统计信息

func (*Conn) Write

func (c *Conn) Write(buf []byte) (int, error)

Write 向连接写入数据

type Listener

type Listener Client

Listener 是 Client 的别名类型

func (*Listener) Accept

func (l *Listener) Accept() (manet.Conn, error)

Accept 接受一个新的中继连接 返回值:

  • manet.Conn 新接受的中继连接
  • error 可能发生的错误

func (*Listener) Addr

func (l *Listener) Addr() net.Addr

Addr 返回监听器的网络地址 返回值:

  • net.Addr 网络地址对象

func (*Listener) Close

func (l *Listener) Close() error

Close 关闭监听器 返回值:

  • error 可能发生的错误

func (*Listener) Multiaddr

func (l *Listener) Multiaddr() ma.Multiaddr

Multiaddr 返回监听器的多地址 返回值:

  • ma.Multiaddr 多地址对象

type NetAddr

type NetAddr struct {
	// Relay 是中继节点的地址
	Relay string
	// Remote 是远程节点的地址
	Remote string
}

NetAddr 表示网络地址

func (*NetAddr) Network

func (n *NetAddr) Network() string

Network 返回网络类型名称

func (*NetAddr) String

func (n *NetAddr) String() string

String 返回网络地址的字符串表示

type Reservation

type Reservation struct {
	// Expiration 是预留的过期时间
	Expiration time.Time
	// Addrs 包含了经过验证的预留节点的公共地址,可以向网络宣告
	Addrs []ma.Multiaddr

	// LimitDuration 是中继节点保持中继连接打开的时间限制。如果为0,则没有限制
	LimitDuration time.Duration
	// LimitData 是中继节点在重置中继连接前,每个方向可以中继的字节数
	LimitData uint64

	// Voucher 是中继节点提供的已签名的预留凭证
	Voucher *proto.ReservationVoucher
}

Reservation 是一个包含 relay/v2 槽位预留信息的结构体

func Reserve

func Reserve(ctx context.Context, h host.Host, ai peer.AddrInfo) (*Reservation, error)

Reserve 在中继节点中预留一个槽位并返回预留信息 客户端必须预留槽位才能让中继节点为其中继连接

参数:

  • ctx: context.Context 上下文对象
  • h: host.Host 主机对象
  • ai: peer.AddrInfo 中继节点的地址信息

返回值:

  • *Reservation 预留信息
  • error 错误信息

type ReservationError

type ReservationError struct {
	// Status 是中继节点拒绝预留请求时返回的状态。在其他失败情况下设置为 pbv2.Status_CONNECTION_FAILED
	Status pbv2.Status

	// Reason 是预留失败的原因
	Reason string
	// contains filtered or unexported fields
}

ReservationError 是在预留中继节点槽位失败时返回的错误

func (ReservationError) Error

func (re ReservationError) Error() string

Error 实现了 error 接口,返回格式化的错误信息

func (ReservationError) Unwrap

func (re ReservationError) Unwrap() error

Unwrap 返回底层错误

Jump to

Keyboard shortcuts

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