# README
msgio - 消息 IO
这是一个简单的包,用于帮助读写长度分隔的切片。它对构建网络协议很有帮助。
使用方法
Reading
import "github.com/dep2p/go-dep2p/p2plib/msgio"
rdr := ... // some reader from a wire
mrdr := msgio.NewReader(rdr)
for {
msg, err := mrdr.ReadMsg()
if err != nil {
return err
}
doSomething(msg)
}
Writing
import "github.com/dep2p/go-dep2p/p2plib/msgio"
wtr := genReader()
mwtr := msgio.NewWriter(wtr)
for {
msg := genMessage()
err := mwtr.WriteMsg(msg)
if err != nil {
return err
}
}
Duplex
import "github.com/dep2p/go-dep2p/p2plib/msgio"
rw := genReadWriter()
mrw := msgio.NewReadWriter(rw)
for {
msg, err := mrdr.ReadMsg()
if err != nil {
return err
}
// echo it back :)
err = mwtr.WriteMsg(msg)
if err != nil {
return err
}
}
# Packages
No description provided by the author
Package pbio 提供了带有 varint 前缀的 protobuf 消息读写功能。 本代码改编自 gogo/protobuf,使用 multiformats/go-varint 实现高效、可互操作的长度前缀。
# Go 语言的 Protocol Buffers 增强版
版权所有 (c) 2013, GoGo 作者保留所有权利。 http://github.com/gogo/protobuf
在遵循以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:
- 源代码的重新分发必须保留上述版权声明
本声明、以下条件和免责声明。 - 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述
版权声明、本条件列表和以下免责声明。
本软件由版权所有者和贡献者"按原样"提供,不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的保证。 在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于采购替代商品或服务;使用、数据或利润损失; 或业务中断)承担责任,无论是基于合同、严格责任或侵权(包括疏忽或其他)的任何责任理论,即使事先被告知可能发生此类损害。.
Package protoio 提供了带有 varint 前缀的 protobuf 消息读写功能。 本代码改编自 gogo/protobuf,使用 multiformats/go-varint 实现高效、可互操作的长度前缀。
# Go 语言的 Protocol Buffers 增强版
版权所有 (c) 2013, GoGo 作者保留所有权利。 http://github.com/gogo/protobuf
在遵循以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改:
- 源代码的重新分发必须保留上述版权声明
本声明、以下条件和免责声明。 - 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述
版权声明、本条件列表和以下免责声明。
本软件由版权所有者和贡献者"按原样"提供,不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的保证。 在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于采购替代商品或服务;使用、数据或利润损失; 或业务中断)承担责任,无论是基于合同、严格责任或侵权(包括疏忽或其他)的任何责任理论,即使事先被告知可能发生此类损害。.
# Functions
Combine 将一对 msgio.Writer 和 msgio.Reader 包装成 msgio.ReadWriter 参数: - w: Writer 接口实现 - r: Reader 接口实现
返回值: - ReadWriteCloser: 组合后的读写器.
LimitedReader 使用 msgio 帧读取器包装一个 io.Reader。 当消息长度读取完成时,LimitedReader 将返回一个带有 io.EOF 的读取器。 参数: - r: 输入的 io.Reader
返回值: - io.Reader: 限制长度的读取器 - error: 错误信息.
NewLimitedWriter 使用 msgio 帧写入器包装一个 io.Writer。 它是 LimitedReader 的反向操作:它会缓冲所有写入直到调用"Flush"。 当调用 Flush 时,它会先写入缓冲区大小,然后刷新缓冲区,重置缓冲区,并开始接受更多的传入写入。 参数: - w: 输出的 io.Writer
返回值: - *LimitedWriter: 限制长度的写入器.
NewReader 使用 msgio 帧读取器包装一个 io.Reader msgio.Reader 将一次读取完整的消息(使用长度) 假设另一端有等效的写入器 参数: - r: 底层的 io.Reader
返回值: - ReadCloser: 包装后的读取器.
NewReaderSize 与 NewReader 等效,但允许指定最大消息大小 参数: - r: 底层的 io.Reader - maxMessageSize: 最大消息大小
返回值: - ReadCloser: 包装后的读取器.
NewReaderSizeWithPool 与 NewReader 相同,但允许指定缓冲池和最大消息大小 参数: - r: 底层的 io.Reader - maxMessageSize: 最大消息大小 - p: 自定义的缓冲池
返回值: - ReadCloser: 包装后的读取器.
NewReaderWithPool 与 NewReader 相同,但允许指定缓冲池 参数: - r: 底层的 io.Reader - p: 自定义的缓冲池
返回值: - ReadCloser: 包装后的读取器.
NewReadWriter 使用 msgio.ReadWriter 包装一个 io.ReadWriter 写入和读取将被适当地加上帧 参数: - rw: 底层的 io.ReadWriter
返回值: - ReadWriteCloser: 包装后的读写器.
NewVarintReader 使用 varint msgio 帧读取器包装一个 io.Reader 读取器将一次读取完整的消息(使用长度) Varint 根据 https://golang.org/pkg/encoding/binary/#ReadUvarint 读取 假设另一端有等效的写入器 参数: - r: 底层的 io.Reader
返回值: - ReadCloser: 包装后的读取器.
NewVarintReaderSize 等同于 NewVarintReader,但允许指定最大消息大小 参数: - r: 底层的 io.Reader - maxMessageSize: 最大消息大小
返回值: - ReadCloser: 包装后的读取器.
NewVarintReaderSizeWithPool 与 NewVarintReader 相同,但允许指定缓冲池和最大消息大小 参数: - r: 底层的 io.Reader - maxMessageSize: 最大消息大小 - p: 缓冲池
返回值: - ReadCloser: 包装后的读取器.
NewVarintReaderWithPool 与 NewVarintReader 相同,但允许指定缓冲池 参数: - r: 底层的 io.Reader - p: 缓冲池
返回值: - ReadCloser: 包装后的读取器.
NewVarintWriter 使用 varint msgio 帧写入器包装一个 io.Writer 写入器将使用 https://golang.org/pkg/encoding/binary/#PutUvarint 将每个消息的长度前缀写为 varint 参数: - w: 底层的 io.Writer
返回值: - WriteCloser: 包装后的写入器.
NewVarintWriterWithPool 与 NewVarintWriter 相同,但允许指定缓冲池 参数: - w: 底层的 io.Writer - p: 缓冲池
返回值: - WriteCloser: 包装后的写入器.
NewWriter 使用 msgio 帧写入器包装一个 io.Writer msgio.Writer 将为每个写入的消息写入长度前缀 参数: - w: 底层的 io.Writer
返回值: - WriteCloser: 包装后的写入器.
NewWriterWithPool 与 NewWriter 相同,但允许用户传入自定义缓冲池 参数: - w: 底层的 io.Writer - p: 自定义的缓冲池
返回值: - WriteCloser: 包装后的写入器.
ReadLen 从指定的读取器中读取长度 参数: - r: 读取器接口 - buf: 用于存储读取数据的缓冲区,如果为nil则创建新的缓冲区
返回值: - int: 读取到的长度值 - error: 读取过程中的错误信息
示例:
l, err := ReadLen(r, nil) _, err := ReadLen(r, buf).
WriteLen 将长度写入指定的写入器 参数: - w: 写入器接口 - l: 要写入的长度值
返回值: - error: 写入过程中的错误信息.
# Structs
LimitedWriter 实现了一个带缓冲的限制长度写入器.
# Interfaces
ReadCloser 组合了 Reader 和 Closer 接口.
Reader 是 msgio Reader 接口,用于读取带长度前缀的消息.
ReadWriteCloser 组合了 Reader、Writer 和 Closer 接口.
ReadWriter 组合了 Reader 和 Writer 接口.
WriteCloser 是 Writer + Closer 接口,类似于 golang/pkg/io.
Writer 是 msgio Writer 接口,用于写入带长度前缀的消息.