首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法用proto3实现extend?

有没有办法用proto3实现extend?
EN

Stack Overflow用户
提问于 2017-09-19 18:38:59
回答 1查看 2.2K关注 0票数 3

因为proto3中没有extend,所以我把基本消息和google.protobuf.Any类型的消息组合在一起,但是它的二进制长度太长了

.proto文件

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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中实现扩展功能或者减少数据包的长度呢?谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-09-20 14:31:52

一种替代方法是使用以下方法之一:

代码语言:javascript
复制
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个字节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46298306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档