【发布时间】: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 消息,该消息
可以包含Options 或Event 消息。
message PublishMessage {
oneof content {
Options options = 1;
Event event = 2;
}
}
然后,该服务将期望第一个 PublishMessage 包含 Options 消息,所有后续消息都包含 Event 消息。这会从包装消息中引入额外的开销,并使 api 有点笨拙。
有没有更简洁的方法来达到同样的效果?
【问题讨论】:
标签: protocol-buffers grpc