在 gRPC 中为服务器和客户端使用不同的 proto 文件

Using different proto files for server and client in gRPC

我有一个 gRPC 服务器的原型文件

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string othermessage = 1;
  string message = 2;
  string othermessage2 = 3;
}

我的客户不需要 othermessage 和 othermessage2 字段。我为客户制作其他原型文件

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 2;
}

有效,但正确吗?

我看到了以下优点:客户端只接收必要的数据,客户端的原型文件没有超载。例如,在 sql 中,我们仅获取必填字段。

也许它更有效率?是所有字段都通过网络传输还是只传输请求的字段?

我使用文章 Analyzing gRPC messages using Wireshark 来验证通过网络发送的字段。发送所有字段。因此,使用截断的原型文件并不能提高效率。

因此,我们可以在客户端使用截断的 proto 文件,如果它包含非破坏性差异,类推 non-breaking changes。这不会增加性能,只能用于减少客户端的proto文件。