我们假设我们使用gRCP / Protobuf来连接许多应用程序。 这些应用程序是以自己的速度在自己的团队中开发和发布的。随着时间的推移,将在定义的界面上使用不同版本的相同应用程序的不同版本(例如,在用户PC上安装的桌面应用程序)。
虽然Protobuf旨在允许向后兼容,但有没有办法知道哪个版本的界面在不同的点上运行?
最简单的实现是使接口版本等于app版本。 但是,由于使用了许多语言,在所有语言中实现应用程序版本并非易事。
那么版本界面如何让服务器知道客户端版本? 我认为服务器应该能够记录
AppName v.version [使用interface v.version]
的DATETIME连接
答案 0 :(得分:1)
在即将推出的gRPC版本中,将会有一项名为Server Reflection的新功能。这将允许客户端向服务器询问描述正在使用的proto文件的描述符。客户端将知道服务器正在运行的内容,而不是服务器知道客户端正在运行的版本。如果服务器描述符与客户端已有的服务器描述符匹配,则它将知道它们在相同版本上发言。
这将在版本1.1
中发布。
请注意,Protobufs的设计是为了让您不要必须这样做!如果正确设置了proto,则新旧版本的客户端和服务器应该一起工作。
答案 1 :(得分:-1)
如果使用协议缓冲区版本2,则可以使用默认值来实现此目的。协议缓冲区3已删除对默认值的支持,因此此答案在那里不起作用。
在定义界面的.proto文件中,有类似的内容:
for i in mbr[i]:
variable = "mbr[i]_file.dat"
...
这样任何客户端都会自动包含从.proto。
中获取的版本号编辑:啊,刚注意到proto3标签..所以我猜这个答案毕竟对你没用。
答案 2 :(得分:-1)
执行此操作的一种方法是添加custom option并在.proto文件的顶部设置该选项,如下所示:
option (my_app.version) = 3;
然后,在每种语言中,您都可以检查该选项的值,并将其指定为您的版本号。