在 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文件。
我有一个 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文件。