【问题标题】:Use raw bytes for gRPC payload in C++在 C++ 中将原始字节用于 gRPC 负载
【发布时间】:2023-02-22 07:02:43
【问题描述】:

我正在研究 gRPC 服务的客户端/服务器实现,其中服务器和客户端都将用 C++ 编写。服务器和客户端将使用双向流进行通信,并且需要发送原始字节作为 gRPC (HTTP) 负载。目标是避免 Protobuf 的开销并使用自定义序列化代码。如何在没有任何序列化的情况下使用 gRPC++?

【问题讨论】:

    标签: c++ grpc


    【解决方案1】:

    序列化由 SerializationTraits 的特化控制。 有一个built-in one for the grpc::ByteBuffer type

    所以,使用像grpc::ServerAsyncResponseWriter<grpc::ByteBuffer>这样的东西 或者 grpc::ServerWriteReactor<grpc::ByteBuffer> 如果可以的话应该已经可以工作了 使用 grpc::ByteBuffer 作为您的缓冲区类型。

    如果没有,您可以提供自己的专业化。

    注意:ProtoBuf codegen 写了很多胶水代码来注册 您要公开的各种方法的“处理程序”代码。如果你想 要使用原始字节缓冲区,您需要自己编写此代码。它已经 一段时间以来,我查看了 protoc 生成的内容。我会从跑步开始 helloworld.proto 文件上的 codegen 并查看它为 Greeter::AsyncServiceGreeter::CallbackService 基类。

    我也没有在 C++ 中使用回调/反应器模型,只有 “异步”/完成队列模型。我认为回调/反应器模型使用 还有SerializationTraits

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2017-12-17
      • 2020-05-29
      相关资源
      最近更新 更多