Ili*_*oly 5 protocol-buffers grpc
这是使用来自客户端的事件流的服务的原型定义
message Event {
// ...
}
service EventService {
rpc Publisher(stream Event) returns (google.protobuf.Empty);
}
Run Code Online (Sandbox Code Playgroud)
问题是需要告诉服务器如何处理这个流。理想情况下,它会首先收到一条Options消息:
message Event {
// ...
}
message Options {
// ...
}
service EventService {
rpc Publisher(Options, stream Event) returns (google.protobuf.Empty);
}
Run Code Online (Sandbox Code Playgroud)
但是,grpc 只支持rpc方法的一个参数。一种解决方案是引入一个额外的PublishMessage消息,它可以包含一个Options或Event消息。
message PublishMessage {
oneof content {
Options options = 1;
Event event = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
然后服务会期望第一个PublishMessage包含Options消息,所有后续的包含Event消息。这会从包装消息中引入额外的开销,并使 api 有点笨拙。
有没有更干净的方法来实现相同的结果?
oneof当有许多字段或消息在起作用时,建议使用使用方法。开销很小,因此通常不会成为问题。不过也有笨拙之处。
如果只有几个字段,您可能希望将 Options 和 Event 中的字段组合成一条消息。或者类似地将选项添加到事件作为字段。您希望 Options 字段出现在第一个请求中,而在后续请求中丢失。当配置字段较少时,这会更有效,例如只有“名称”。
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |