作者:mobiledu2502884897 | 来源:互联网 | 2022-12-18 18:41
我有一个如下定义的原型架构,
message User {
int64 id = 1;
bool email_subscribed = 2;
bool sms_subscribed = 3;
}
现在,根据正式的proto3文档,默认值未序列化以节省导线传输期间的空间。但在我的情况下,我想接收客户端是否已明确设置true/false
字段email_subscribed/sms_subscribed
(因为true
以前是值,但现在用户想退订)。因此,当客户端发送false
这些字段中的任何一个时,生成器代码序列化器只会忽略这些字段。
在上述情况下,如何实现并避免遗漏这些字段?
PS:我使用Javascript作为我的GRPC客户端以及Python和GRPC服务器。
1> Marc Gravell..:
您不能使用proto3。最好的选择可能是将未指定的三布尔枚举定义为值为零的第一项,此后再定义一些真/假值。
这将需要与protobuf 相同的空间bool
,但是将不是二进制兼容的-因此您不能简单地更改现有消息中声明的成员类型。好吧,我想如果您将true设置为=== 1,那么至少它仍然可以工作-并且对于转换,您必须预料到false /在清除所有旧数据之前未指定为模棱两可。
另一个选择是bool fooSpecified
为每个添加一个成员bool foo
,但是会占用更多空间,并且由于手动操作而容易出错。