util

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewDelimitedWriter

func NewDelimitedWriter(w io.Writer) pbio.WriteCloser

NewDelimitedWriter 创建一个新的分隔消息写入器

参数:

  • w: io.Writer 底层写入器

返回值:

  • pbio.WriteCloser 新创建的分隔消息写入器

func PeerInfoToPeerV2

func PeerInfoToPeerV2(pi peer.AddrInfo) *pbv2.Peer

PeerInfoToPeerV2 将 AddrInfo 转换为 protobuf 格式的 Peer 参数:

  • pi: peer.AddrInfo 要转换的 AddrInfo 对象

返回值:

  • *pbv2.Peer 转换后的 protobuf 格式 Peer 对象

func PeerToPeerInfoV2

func PeerToPeerInfoV2(p *pbv2.Peer) (peer.AddrInfo, error)

PeerToPeerInfoV2 将 protobuf 格式的 Peer 转换为 AddrInfo 参数:

  • p: *pbv2.Peer protobuf 格式的 Peer 对象

返回值:

  • peer.AddrInfo 转换后的 AddrInfo 对象
  • error 转换过程中的错误

Types

type DelimitedReader

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

DelimitedReader 实现了一个无缓冲的分隔消息读取器

func NewDelimitedReader

func NewDelimitedReader(r io.Reader, maxSize int) *DelimitedReader

NewDelimitedReader 创建一个新的分隔消息读取器 gogo protobuf 的 NewDelimitedReader 是有缓冲的,可能会吞掉流数据 所以我们需要实现一个兼容的无缓冲读取器 无缓冲读取会导致性能下降:读取消息时需要多次单字节读取来获取长度,再读取一次获取消息内容 但这种性能下降并不严重,因为:

  • 读取器在握手阶段只读取一到两条消息(dialer/stop或hop),相对于连接生命周期来说微不足道
  • 消息很小(最大4k),长度只占用几个字节,所以每条消息最多只需要三次读取

参数:

  • r: io.Reader 底层读取器
  • maxSize: int 最大消息大小

返回值:

  • *DelimitedReader 新创建的分隔消息读取器

func (*DelimitedReader) Close

func (d *DelimitedReader) Close()

Close 关闭读取器并释放缓冲区

注意:

  • 会将内部缓冲区归还到内存池

func (*DelimitedReader) ReadByte

func (d *DelimitedReader) ReadByte() (byte, error)

ReadByte 读取单个字节

返回值:

  • byte: 读取的字节
  • error: 读取过程中的错误

func (*DelimitedReader) ReadMsg

func (d *DelimitedReader) ReadMsg(msg proto.Message) error

ReadMsg 读取一个完整的protobuf消息

参数:

  • msg: proto.Message 用于存储读取结果的protobuf消息对象

返回值:

  • error: 读取过程中的错误,如果消息过大会返回"消息太大"错误

Jump to

Keyboard shortcuts

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