【问题标题】:protocol-buffers: send multiple messages of the same type协议缓冲区:发送多个相同类型的消息
【发布时间】:2022-01-20 00:27:55
【问题描述】:

例如,我在 proto 文件中定义了如下回复消息:

syntax = "proto3";

message MyRequest {
   int32 id = 1;
}

message MyReply {
   int32 id = 1;
   int32 group = 2;
   string name = 3;
}

...

如何在.proto 文件中判断 MyReply 可以被多次接收,即是否有许多对象可以一起发送?

【问题讨论】:

    标签: protocol-buffers grpc


    【解决方案1】:

    如果我正确理解您的问题,使用repeated 字段似乎可以满足您的需求:

    message ReplyItem {
       int32 id = 1;
       int32 group = 2;
       string name = 3;
    }
    
    message MyReply {
       repeated ReplyItem items = 1;
    }
    

    【讨论】:

    • 谢谢!这是否也意味着单个 ReplyItem 可以通过网络发送,而不是封装在 MyReply 中?
    • 你可以发送一个独立的ReplyItem,但如果接收者期待一个MyReply,它不会解码(见encoding) .
    • 所以换句话说我需要两个 Request 消息,一个期望 ReplyItem,另一个期望 MyReply ?
    • 嗯,这是一个选项。但是我建议只接受repeated 选项;因为这允许发送 0 个项目,所以它满足了两种需求(是的,发送单个项目的调用稍微复杂一些,但我觉得添加第二个调用会使整个 API 更复杂)。
    • 流是另一种选择,但它的工作方式完全不同。调用/服务流式调用比非流式调用更复杂,因此我只建议在需要时使用(即传递大量数据或无法立即使用的数据)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多