Техника дозирования с использованием Protobufs - PullRequest
7 голосов
/ 04 октября 2019

Существует ли эффективный способ пакетирования различных событий Protobuf при отправке по HTTP?

Цель состоит в том, чтобы составить список многотипных сообщений Protobuf в одном запросе. У меня есть идея разделить сообщения на небольшие массивы и указать их тип, чтобы можно было десериализовать их на сервере.

1 Ответ

2 голосов
/ 11 октября 2019

Вы можете использовать несколько типов сообщений Any в сочетании с repeated следующим образом:

message Any {
    string type_url = 1;
    bytes value = 2;
}

message Envelope {
    repeated Any events = 1;
}

Затем в своем коде:

  • при сериализации необходимоустановите type_url в соответствии с типом сообщения, которое вы сериализуете в value
  • при десериализации, вы должны прочитать type_url, чтобы узнать, какой тип содержится в value, и соответственно десериализовать

Пример выше воспроизводит google/protobuf/any, который задокументирован здесь: https://developers.google.com/protocol-buffers/docs/proto3#any

...