如何在 gRPC 中使用标量类型作为函数参数?
Posted
技术标签:
【中文标题】如何在 gRPC 中使用标量类型作为函数参数?【英文标题】:How to use scalar type as function argument in gRPC? 【发布时间】:2020-03-06 08:41:50 【问题描述】:在 gRPC 中,它期望参数是 protobuf 消息。
假设我要发送一个 int,我必须创建一个消息 message Int int32 value = 1;
并使用此消息发送一个 int。
下面是函数定义示例:rpc Range(Int) returns (stream Int)
但我不想为每个默认标量类型创建这样的消息结构,例如bool、int32、int64、float 等 如何在 gRPC 函数参数中使用标量类型?
【问题讨论】:
您可能正在寻找 struct.proto 中的值?它处理许多常见类型 【参考方案1】:Protobuf 提供了封装类型,你可以使用Int32Value
。
应该是这样的
import "google/protobuf/wrappers.proto";
service YourSerice
rpc Range(google.protobuf.Int32Value) returns (stream google.protobuf.Int32Value)
您可以在 protobuf github (wrappers.proto) 上查看其他原始包装器。
【讨论】:
谢谢。我已经完成了您建议的更改,但似乎Int32Value
不存在。它说Import google/protobuf/wrappers.proto but not used.
和"Int32Value" is not defined.
我使用python -m grpc_tools.protoc
来编译proto 文件。而grpcio
版本是1.27.2
。如何检查wrappers.proto
中定义了哪些消息?即这个包装文件在哪里?
我没有使用完全限定名,更新了 sn-p。你能再试一次吗?
是的。它现在正在工作。但是打字时间很长。有没有办法让它变短?以及如何在我的 python 代码中访问此 Int32Value
消息?它会像helloworld_pb2.Int()
一样被访问吗?
我认为没有办法让它变短。我没有使用 python,所以我不知道确切的语法。您可以像对待任何其他消息一样对待它。您需要访问Int32Value
的value
字段。以上是关于如何在 gRPC 中使用标量类型作为函数参数?的主要内容,如果未能解决你的问题,请参考以下文章