为了在RPC的传输中减少传输的数据大小,对net.TCPConn进行了封装,实现了压缩/解压缩功能的net.Conn,可以有效的减少带宽,提升传输效率。
常用的两种压缩格式:
zip 是常用的一种压缩格式,Go标准库中提供了它的实现。
snappy 是Google基于LZ77的思路用C++语言编写的非常高的速度和合理的压缩率 数据压缩与解压程序库。
定义压缩类型:
type CompressType byte
const (
// CompressNone represents no compression
CompressNone CompressType = iota
// CompressFlate represents zip
CompressFlate
// CompressSnappy represents snappy
CompressSnappy
)
重新定义net.Conn
type CompressConn struct {
net.Conn
r io.Reader
w io.Writer
compressType CompressType
}
重写方法:
func (c *CompressConn) Read(b []byte) (n int, err error) {
return c.r.Read(b)
}
func (c *CompressConn) Write(b []byte) (n int, err error) {
return c.w.Write(b)
}
小结:简单的串下压缩使用,涉及到具体的zip和snappy使用请查看以前的文章。在压缩比和速度的权衡中你可以选择zip格式压缩或者snappy格式压缩。
更多内容请关注每日编程,每天进步一点。
閱讀更多 每日編程 的文章