如何在grpc中进行有效负载压缩?

时间:2016-04-26 00:14:50

标签: c++ grpc

我正在开发一个基于grpc的应用程序,其中请求数据可能高达500KB,响应可能更大,所以我想压缩数据。我很难在grpc中找到有关如何操作的文档/示例。 clientContext中的set_compression_algorithm有什么作用?我是否必须在服务器端设置一些东西?

或者我应该忘记对grpc进行压缩,并自行压缩/解压缩进/出protobuf消息?

1 个答案:

答案 0 :(得分:7)

grpc::ClientContext::set_compression_algorithm方法选择用于客户端调用的算法,即从客户端发送到服务器的数据。

在服务器端,您可以通过grpc::ServerBuilder::SetCompressionOptions控制在频道创建时的压缩选项(即,用于所有服务器调用)(请参阅https://github.com/grpc/grpc/blob/master/include/grpc++/server_builder.h ),它允许你:

  1. 选择服务器应该使用的压缩算法。默认情况下,所有算法都已启用。
  2. 选择默认情况下将为所有服务器响应使用的压缩算法(前提是对等客户端支持它。如果不支持,则响应将以未压缩的方式发送)。
  3. 对于服务器上的一次性通话响应,您可以使用grpc::ServerContext::set_compression_algorithmgrpc::ServerContext::set_compression_level。建议使用后者,因为它根据客户端保证支持的请求压缩级别选择最佳算法。

    接下来的几天我会把你好世界风格的例子放在一起。我创建了一个跟踪此问题的问题:https://github.com/grpc/grpc/issues/6297随意ping那里。我也正在实现一些低级别的日志记录,以便显示一些压缩统计信息,因为你们能够断言压缩实际上正在工作(否则一切都是完全透明的)。