我看到了一些方法WithCompression
和UseCompression
,但我不太清楚它们是如何组合在一起的 - 这是一个简单的例子,说明放入客户端的内容以及放入服务器的内容会真的有帮助。
我的第一次尝试,
conn, err := grpc.Dial(
addr,
grpc.WithTimeout(timeout),
grpc.WithCompressor(grpc.NewGZIPCompressor()),
...
当我打电话时,导致了这个错误:
grpc: Decompressor is not installed for grpc-encoding \"gzip\"
答案 0 :(得分:1)
有关压缩API的文档可在以下位置找到:https://github.com/grpc/grpc-go/blob/master/Documentation/compression.md
答案 1 :(得分:1)
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"