18

假设我们使用 gRCP/Protobuf 连接许多应用程序。这些应用程序是由他们自己的团队以自己的速度开发和发布的。随着时间的推移,同一应用程序(例如安装在用户 PC 上的桌面应用程序)将在定义的界面上使用不同版本的不同版本。

虽然 Protobuf 旨在允许向后兼容,但有没有办法知道在不同点运行的接口版本是什么?

最简单的实现是让接口版本等于应用程序版本。但是由于使用了许多语言,在所有语言中实现应用程序版本控制并非易事。

那么版本接口如何让服务器知道客户端版本呢?我觉得服务器应该可以登录

来自 AppName v.version 的 DATETIME 连接 [使用接口 v.version]

4

3 回答 3

5

在即将发布的 gRPC 版本中,将有一个名为 Server Reflection 的新功能。这将允许客户端向服务器询问描述正在使用的 proto 文件的描述符。与其让服务器知道客户端正在运行的版本,不如让客户端知道服务器正在运行什么。如果服务器描述符与客户端已经拥有的描述符匹配,那么它将知道他们正在使用相同的版本。

这将在版本中发布1.1

请注意,Protobuf 的设计使您不必这样 做!如果您正确设置了原型,则新旧版本的客户端和服务器应该可以一起工作。

于 2017-01-14T04:44:39.147 回答
-1

如果您使用的是协议缓冲区版本 2,则可以使用默认值来实现这一点。协议缓冲区 3 已删除对默认值的支持,因此此答案在那里不起作用。

在定义接口的 .proto 文件中,有如下内容:

message MyLoginMessage
{
    ... normal login fields ...

    // Increment this number when you make new releases
    // of this .proto.
    optional int32 protocol_version [default=55];
}

这样,任何客户端都会自动包含取自 .proto 的版本号。

编辑:啊,刚刚注意到 proto3 标签..所以我想这个答案对你毕竟没有用。

于 2016-11-10T13:01:18.923 回答
-1

一种方法是添加一个自定义选项并将该选项设置在 .proto 文件的顶部,如下所示:

option (my_app.version) = 3;

然后在每种语言中,您可以检查该选项的值并将其指示为您的版本号。

于 2016-11-11T16:56:53.917 回答