【问题标题】:GRPC: Client streaming with configuration messageGRPC:带有配置消息的客户端流式传输
【发布时间】:2018-06-22 04:05:51
【问题描述】:

这是一个使用事件流的服务的原型定义 来自客户

message Event {
  // ...
}

service EventService {
  rpc Publisher(stream Event) returns (google.protobuf.Empty);
}

问题是需要告诉服务器如何处理这个流。 理想情况下,它会首先收到Options 消息:

message Event {
  // ...
}

message Options {
  // ...
}

service EventService {
  rpc Publisher(Options, stream Event) returns (google.protobuf.Empty);
}

但是,grpc 只支持rpc 方法的一个参数。 一种解决方案是引入额外的PublishMessage 消息,该消息 可以包含OptionsEvent 消息。

message PublishMessage {
  oneof content {
    Options options = 1;
    Event event = 2;
  }
}

然后,该服务将期望第一个 PublishMessage 包含 Options 消息,所有后续消息都包含 Event 消息。这会从包装消息中引入额外的开销,并使 api 有点笨拙。

有没有更简洁的方法来达到同样的效果?

【问题讨论】:

    标签: protocol-buffers grpc


    【解决方案1】:

    当许多字段或消息在起作用时,建议使用oneof。开销很小,因此通常不会成为问题。不过还是有点笨重。

    如果只有几个字段,您可能希望将选项和事件中的字段组合成一条消息。或者类似地将选项添加到事件作为字段。您希望 Options 字段出现在第一个请求中,而在随后的请求中丢失。这在配置字段较少时效果更好,例如“名称”。

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2020-01-31
      • 2020-03-29
      • 2018-05-15
      • 2021-07-15
      • 2016-10-12
      • 2021-05-14
      • 2016-10-05
      • 1970-01-01
      相关资源
      最近更新 更多