因为proto3中没有extend,所以我把基本消息和google.protobuf.Any类型的消息组合在一起,但是它的二进制长度太长了
.proto文件
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的扩展只多了10个字节,那么有没有办法在proto3中实现扩展功能或者减少数据包的长度呢?谢谢
发布于 2017-09-20 14:31:52
一种替代方法是使用以下方法之一:
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个字节。
https://stackoverflow.com/questions/46298306
复制相似问题