Python:在拦截器中读取grpc proto请求

时间:2019-02-21 15:00:28

标签: php python protocol-buffers grpc

如何使用Python在拦截器中读取grpc原型请求?

在PHP中,我可以阅读$argument,这正是我所需要的。

<?php

use Grpc\Interceptor;

class MyInterceptor extends Interceptor
{


    public function interceptUnaryUnary($method,
                                        $argument,
                                        $deserialize,
                                        array $metadata = [],
                                        array $options = [],
                                        $continuation)
    {
        // $argument is what I needto 
        return parent::interceptUnaryUnary($method, $argument, $deserialize, $metadata, $options, $continuation);
    }
}

2 个答案:

答案 0 :(得分:0)

不幸的是,gRPC Python没有完整的服务器拦截器实现,无法让您访问requestservicer_context,但是您可以访问method字符串和invocation_metadata ,有关更多详细信息,请检查history。如果要实现的语义可以在Python的元类或继承中实现,请这样做。如果您想请求此功能,请在GitHub仓库grpc/grpc ...

中发布问题

以下一些资源可以帮助您找到答案:

答案 1 :(得分:-1)

我实现了一个小的grpc-interceptor程序包,该程序包提供了可以访问请求和上下文的服务器拦截器。它使用内置的grpc.ServerInterceptor,只是简化了界面。

以下是使用方法的简短摘要:

class MyInterceptor(ServerInterceptor):
    def intercept(self, method, request, context, method_name):
        # Do fancy stuff here...
        return method(request, context)

documentation中有更完整的示例。

它具有MIT许可证,因此您可以随意使用它。如果您不想使用该软件包,但想了解它的工作原理,则代码为here。改编自OpenTracing PR