c++ - 如何在 grpc 中进行 payload 压缩?

标签 c++ grpc

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

或者我应该忘记在 grpc 上进行压缩,而自己对 protobuf 消息进行压缩/解压?

最佳答案

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

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

  1. 选择服务器采用的压缩算法。默认情况下,启用所有算法。
  2. 选择默认情况下所有服务器响应将使用哪种压缩算法(前提是对等客户端支持它。如果不支持,将以未压缩的方式发送响应)。

对于服务器端的一次性调用响应,您可以使用 grpc::ServerContext::set_compression_algorithmgrpc::ServerContext::set_compression_level。建议使用后者,因为它会根据客户端保证支持的请求压缩级别选择最佳算法。

我会在接下来的几天里整理出 hello-world 风格的例子。我创建了一个问题来跟踪这个:https://github.com/grpc/grpc/issues/6297随意 ping 那里。我还实现了一些低级日志记录以显示一些压缩统计信息,以便你们能够断言压缩确实有效(否则一切都是完全透明的)。

关于c++ - 如何在 grpc 中进行 payload 压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36853261/

相关文章:

azure - 在 vnet 中使用 gRPC 将 Azure 应用服务连接到 Azure 容器应用

C++ 代码 : count not working

go - 服务器或客户端如何知道连接是否断开?

c++ - 远程过程调用 - 客户提供的服务

protocol-buffers - 从使用 protoc 生成的 pb2.py 逆向工程 .proto 文件

java - gRPC 流被取消

c++ - OpenCV 估计 Affine3D 共面点的断裂

c++ - 如何在 C 语言中通过按键退出 while 循环?

c++ - 按变量递增for循环

c++ - wxNotebookPage 中的 wx* 布局