Самым простым вариантом здесь может быть простое объявление типа сообщения-оболочки:
message FooRequest {
// remove "required" if using proto3 syntax
required Request1MessageType part1 = 1;
required Request2MessageType part2 = 2;
}
и отправка одного FooRequest
, состоящего из двух внутренних сообщений.Это не всегда возможно, однако, в этом случае вам придется реализовать свой собственный механизм кадрирования внутри двоичной полезной нагрузки.Простой, но прагматичный вариант может состоять в том, чтобы измерить размер первого сообщения (в байтах) - т.е. len
, и отправить:
[len, 4 bytes little endian][message 1, len bytes][message 2]
и снова декодировать его на другом конце - т.е. взять первое4 байта и используйте это для вычисления диапазонов двух внутренних сообщений.Ожидая, что в будущем потребуются дополнительные сообщения, может * * * * * * иметь смысл включать префикс длины в каждое сообщение (т. Е. Также включать префикс длины для сообщения 2), но, строго говоря, этобудет избыточным в текущем случае.