Привет, я новичок в Grpc. < /p>
Недавно я пытаюсь написать клиент Python, который эмулирует соединение GRPC с удаленным сервером, который имеет пользовательское шифрование и сжатие на своем корпусе запроса/ответа. Документация Python.
Q1: Interceptors
В официальном клиенте, написанном в C#, они использовали класс Callinvoker , которые разрешают Pre /Пост-обработка во время сериализации. < /p>
Я считаю, что перехватчики являются эквивалентами Python. Например, в grpc.unaryunaryclientinterceptor существует обратный вызов с именем receptept_unary_unary (продолжение, client_call_details, request) .
Но документ никогда не упоминался о том, что является запросом должен быть. И я изучил примеры Python в grpc Repo, они только показывают, как манипулировать метаданными и значением поля перед сериализацией, что мне не нужно. но не ответы. Я понятия не имею, как добавить пользовательский обратный вызов в ответы серверов перед десериализацией, используя это.
Код: Выделить всё
grpc.ChannelПодумайте, может быть, можно переопределить класс grpc.channel , который добавляет обратный вызов в эти аргументы, то есть
Код: Выделить всё
def encode(data):
pass # my serializer
def decode(data):
pass # my deserializer
class Channel(grpc.Channel):
def unary_unary(method, request_serializer, response_deserializer, _registered_method):
def request(data):
return encode(request_serializer(data))
def response(data):
return request_serializer(decode(data))
return super().unary_unary(method, request, response, _registered_method)
# ... and the same for other methods
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Мобильная версия