Protobuf, как использовать любой тип с прото-сообщением homebrew - PullRequest
1 голос
/ 03 августа 2020

В настоящее время я создаю сервер python gRP C, который сериализует тонны различных протокольных сообщений в json, чтобы сохранить их в no- sql db. Я хотел бы упростить расширение этого сервера, чтобы мы могли добавлять новые типы без перезаписи сервера gRP C и повторного развертывания. В идеале мы хотели бы определить новое сообщение, поместить его в прото-файл и обновить только клиента. Сначала сервер должен ожидать любой тип, но знает файл или папку .proto, где искать, когда дело доходит до сериализации / десериализации.

Я читал о любом типе и изучаю, является ли он мой способ сделать это. По нему есть некоторая документация, но очень мало примеров для работы. Я не совсем понимаю, как сохранить / получить тип поля «Любое».

  • Вся документация использует https как протокол для типа поля Any (например, type. googleapis.com/google.protobuf.Duration). Это тоже значение по умолчанию. Как бы это выглядело, если бы я использовал локальную файловую систему? Как мне сохранить это в прото-сообщении на стороне клиента?
  • Как мне получить тип на стороне сервера?
  • Где я могу найти аналогичный пример?

1 Ответ

1 голос
/ 03 августа 2020

Извините, это лишь частичный ответ.

Недавно я начал использовать Any в проекте и могу рассказать о некоторых перспективах. У меня есть аналогичное (хотя и более простое) требование к тому, что вы изложили. Содержимое сообщения заключено в оболочку, но в моем случае от клиентов требуется отправить дескриптор на сервер и указать специальный c метод, чтобы помочь ему (un) marshal et c.

Я использовал Новый Golang APIv2 Google, знакомый только по Golang и Rust (но не Python). Документация отсутствует, но, надеюсь, вам помогут документы Golang:

Мне тоже было сложно понять концепцию (реализацию) глобального реестра, поэтому я взломал вышеуказанное решение. Метаданные входящего сообщения предоставляют серверу достаточный контекст, чтобы он мог сконструировать тип сообщения и упорядочить в него байты.

...