因为extend
中没有proto3
,所以我将基本消息与google.protobuf.Any
类型消息合并,但它的二进制长度太长
.proto file
message TradeMessage {
google.protobuf.Any message = 1;
string code = 2;
}
message Connect {
int32 seq = 1;
string appid = 2;
string clientid = 3;
string ver = 4;
}
...
.java文件
TradeProtocol.Connect inner = TradeProtocol.Connect.newBuilder()
.setSeq(1)
.setAppid("test")
.build();
TradeProtocol.TradeMessage packet = TradeProtocol.TradeMessage.newBuilder()
.setMessage(Any.pack(inner))
.setCode(2)
.build();
服务发送数据包到客户端,客户端可以解码所有消息到基础TradeMessage,问题是内部的长度是8个字节,而数据包的长度是56个字节。相同的函数实现使用proto2
仅扩展十个字节,那么有没有办法在proto3
中实现扩展函数或减少数据包的长度?感谢
答案 0 :(得分:0)
另一种方法是使用oneof:
message Connect {
int32 seq = 1;
string appid = 2;
string clientid = 3;
string ver = 4;
}
message TradeMessage {
string code = 1;
oneof inner {
Connect inner_connect = 2;
SomeOtherMessage inner_other = 3;
...
}
}
编码大小仍然大于extend
,但只有1-2个字节。