我正在尝试确定一个功能性的、未弃用的、非实验性的解决方案,以通过 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
在服务器端,您不必调用
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))
而且也没有弃用的东西。