通过 GRPC 为客户端/服务器进行 Gzip 压缩

问题描述 投票:0回答:1

我正在尝试确定一个功能性的、未弃用的、非实验性的解决方案,以通过 GRPC 压缩有效载荷。似乎很难获得更新的文档。谁能指出我有用的东西。

我相信我需要使用

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

我在做我的客户:

conn, err := grpc.Dial(":10000", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithDefaultCallOptions(grpc.UseCompressor("gzip")))

在我的服务器上我正在做

serverOpts := []grpc.ServerOption{
    grpc.RPCCompressor(grpc.NewGZIPCompressor()),
    grpc.RPCDecompressor(grpc.NewGZIPDecompressor()),
}
grpcServer := grpc.NewServer(serverOpts...)

但是所有

RPCCompressor
NewGZIPCompressor
RPCDecompressor
NewGZIPDecompressor
都被弃用 在客户端我得到

grpc: Compressor is not installed for requested grpc-encoding "gzip"
当我尝试使用它时。

我试图初始化

func init() {
    encoding.RegisterCompressor(&gzip.Compressor{})
}

但是

Compressor
在 gzip 上未定义。 在这一点上,我正在兜圈子,搜索 Google 上可用的内容。有人解决了这个吗? 我在用
google.golang.org/grpc v1.54.0

go compression grpc deprecated
1个回答
0
投票

在服务器端,您不必调用

encoding.RegisterCompressor(&gzip.Compressor{})
,因为它在init()
包的
google.golang.org/grpc/encoding/gzip
方法中可用
。所以你只需要导入
google.golang.org/grpc/encoding/gzip
包,它没有被弃用的东西。

在客户端,如文档所说

grpc.WithCompressor()
已弃用,您可以使用
grpc.UseCompressor
作为看涨期权:

// WithCompressor returns a DialOption which sets a Compressor to use for
// message compression. It has lower priority than the compressor set by the
// UseCompressor CallOption.
//
// Deprecated: use UseCompressor instead.  Will be supported throughout 1.x.

您可以在调用者上使用它,例如:

c, err := grpc.Dial(":9090")
// handle error here
err = c.Invoke(context.TODO(), "/mymethod", myArgs, myReply, grpc.UseCompressor(gzip.Name))

而且也没有弃用的东西。

© www.soinside.com 2019 - 2024. All rights reserved.