【发布时间】:2021-06-21 10:37:45
【问题描述】:
我是 Go 中 gRPC 的新用户。
我已经完成了关于客户端流 API 的代码。现在我有一个问题。
据我所知,我们必须在proto文件中定义message struct,然后protoc基于这个定义的message struct来生成代码。就我而言,protoc 生成 Go 代码。但是这个过程限制了客户端或服务器重用 API。例如,使用客户端流 API,首先,客户端使用此 API 将温度数据发送到服务器。那么客户端如果想向服务器发送GPS坐标,则必须重新定义message struct,因为温度的结构与GPS坐标的结构不同。但是为了同样的目的是向服务器发送数据。
syntax = "proto3";
package calculator;
option go_package="calculatorpb";
message TemperatureRequest{
float num =1;
}
message TemperatureResponse{
float result =1;
}
message CoordinatesRequest{
float long =1;
float lat =1;
}
message CoordinatesResponse{
float result =1;
}
service CalculatorService{
rpc Temperature(stream AverageRequest) returns (AverageResponse){} //client streaming for temperature
rpc Coordinates(stream CoordinatesRequest) returns (CoordinatesResponse){} //client streaming for Coordinates
}
好像很不方便。
那么,客户端如何在 go 中使用带有 gRPC 的动态消息结构?
如果是,请给我一个客户端流 API 的示例。
【问题讨论】:
-
动态消息结构是什么意思?服务器可以通过某种方式将 proto 文件共享给客户端吗?
-
这没有什么动态的。您的方法正在获取和返回预定义的数据类型。
-
@sonus21 是的。我不知道如何使它变得动态。我的意思是,我如何使用一个函数将任何消息结构流式传输到服务器。