gpt4 book ai didi

protocol-buffers - 有没有办法用proto3实现扩展?

转载 作者:行者123 更新时间:2023-12-04 17:49:21 25 4
gpt4 key购买 nike

因为没有 extendproto3 ,所以我将基本消息与 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的扩展只是十个字节,所以有什么方法可以在 proto3 中实现扩展功能或减少数据包的长度?谢谢

最佳答案

一种替代方法是使用其中之一:

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 个字节。

关于protocol-buffers - 有没有办法用proto3实现扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46298306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com