首页 > 解决方案 > 如何在 gRPC Python 中发送服务器流的初始元数据

问题描述

我有一个提供服务器流式 RPC 的 gRPC 服务器。但是,在调用 RPC 时,我想将一些元数据从客户端发送到服务器。我发现您可以使用with_call非流式 RPC(请参阅GitHub 上的元数据示例)。
这显然不适用于流式 RPC(你会得到一个AttributeError: '_UnaryStreamMultiCallable' object has no attribute 'with_call')。

所以,我的问题是,如何将元数据与服务器流式 RPC 一起从客户端发送到服务器?由于服务器可以检索调用元数据,因此也必须有一种从客户端发送它的方法。

标签: pythongrpc

解决方案


好的,所以我发现了如何使用服务器流式 RPC 发送元数据。您唯一需要做的就是添加一个元组作为metadata关键字参数的参数,如下所示:

stub.MyServerStreamingRPC(
    _pb2.MyServerStreamingRequest(),
    metadata=(('metadata-identifier', 'metadata-value'),)
#                                                      ^
)

如果你像我一样只使用一个元数据对,这里重要的是第一个内部元组后面的逗号。如果您忘记了这一点,则参数的metadata参数不会被识别为元组,您将得到一个ValueError: too many values to unpack (expected 2).
当我第一次尝试简单地传递附加metadata参数时,我确实忘记了这一点,这让我相信它并不像我想象的那么简单。但是,事实证明,如果您知道如何正确使用 Python :D


推荐阅读