Как узнать размер протобуф-сообщения, поступающего с сервера? - PullRequest
0 голосов
/ 16 мая 2018

У меня есть сервер-клиентское приложение.Сервер находится на C ++, а клиент на C #.Сервер может работать на экземпляре Linux, пока клиент находится в Windows.Следовательно, мы не можем делать какие-либо предположения об архитектуре и, следовательно, о порядке байтов.Я использую protobuf для отправки структур данных туда и обратно.В настоящее время принята стратегия отправки сообщения в виде заголовка, который будет содержать размер следующего сообщения, представляющего собой большую структуру данных.Это выглядит следующим образом:

message message_size {
    required fixed64  size = 1;
}

Есть ли способ узнать, сколько байтов protobuf будет отправлять на обоих концах, во сколько будет преобразована сериализированная выше структура байтов?

1 Ответ

0 голосов
/ 16 мая 2018

Основная проблема здесь заключается в том, что корневые сообщения protobuf не имеют префикса длины (в соответствии с дизайном).Не существует явного согласованного API для работы с несколькими сообщениями в открытом потоке, поэтому в основном: любой префикс длины, который вы хотите закодировать и обработать, будет работать.Обычный шаблон - обрабатывать его, используя правила protobuf с фиктивным номером поля;в случае protobuf-net это то, что делают SerializeWithLengthPrefix и DeserializeWithLengthPrefix;но: это не может быть легко доступно из C ++.Возможно, будет проще просто кодировать длину вручную с помощью правил фиксированной ширины / порядкового номера, а затем сразу же выгружать необработанную полезную нагрузку.

...