如何在 Go 中启用 GRPC 压缩

How to enable GRPC compression in Go

我看到了一些方法 WithCompressionUseCompression 但我不是很清楚它们是如何组合在一起的 - 一个简单的例子说明什么放在客户端和什么放在服务器真的很有帮助。

我的第一次尝试,

conn, err := grpc.Dial(
    addr,
    grpc.WithTimeout(timeout),
    grpc.WithCompressor(grpc.NewGZIPCompressor()),
    ...

我打电话的时候出现了这个错误:

grpc: Decompressor is not installed for grpc-encoding \"gzip\"

有关压缩 API 的文档可在以下位置找到:https://github.com/grpc/grpc-go/blob/master/Documentation/compression.md

grpc.WithCompressor 根据文档,DialOption 已弃用。

您可以使用 grpc.UseCompressor(gzip.Name) CallOption,它在调用级别运行

var opts []grpc.CallOption
opts = append(callOptions, grpc.UseCompressor(gzip.Name))
opts = append(callOptions, ...)
opts = append(callOptions, ...)

err := grpc.Invoke(mycontext, "/myRpcFuntion", myInput, myOutput, myGrpcConn, opts...)

您无需致电 RegisterCompressor。 gzip 包导入在 init() 函数

中为您完成
func init() {
    c := &compressor{}
    c.poolCompressor.New = func() interface{} {
        return &writer{Writer: gzip.NewWriter(ioutil.Discard), pool: &c.poolCompressor}
    }
    encoding.RegisterCompressor(c)
}

在服务器端,您需要导入 gzip 包以确保 gzip 压缩器已注册。

import _ "google.golang.org/grpc/encoding/gzip"