Protocol buffers 有没有办法用proto3实现extend?

Protocol buffers 有没有办法用proto3实现extend?,protocol-buffers,Protocol Buffers,因为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

因为
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();

服务向客户端发送数据包,客户端可以将所有消息解码为基本消息,问题是内部消息的长度是8字节,而数据包的长度是56字节。同一个函数实现使用了
proto2
,只扩展了10个字节,那么有没有办法在
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个字节。

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

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