如何在 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,所以我不知道确切的语法。您可以像对待任何其他消息一样对待它。您需要访问Int32Valuevalue 字段。

以上是关于如何在 gRPC 中使用标量类型作为函数参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建参数化递归 CTE 以展平标量函数中的层次结构?

如何在sql server中的标量函数中传递列名[关闭]

在 Apply 块中使用需要表参数的标量函数

一个接受标量或numpy数组作为参数的python函数

.NET CLR sql 标量函数 DataTypes

固定大小的特征类型作为参数