LINUX.ORG.RU

[Protocol Buffers] Описание протокола


0

1

Решил тут покопать Protocol Buffer от гугля и посмотреть, как он подойдёт под мои задачи. В целом штука интересная, но одного я никак не могу понять:

Предположим, у меня протокол состоит из трёх частей - приветствие, действие_1 и действие_2, при этом действия могу повторятся сколько угодно раз и в любой последовательности.

Кроме того, в каждом сообщении передаётся требуемое действие и другая служебная информация (например, таймстамп).

В результате можно написать четыре «сообщения»:

message Header
{
required date timestamp = 1;
required string action = 1;
}

message Registartion
{
required string name = 1;
}

message Action1
{
required string data = 1;
}

message Action2
{
required string data = 1;
}

Можно ли как-то сначала проанализировать header и на его основе уже применить парсер для соответствующего действия?

★★

Последнее исправление: SaBo (всего исправлений: 1)
Ответ на: комментарий от UVV

> Возьми Ice =)
Уклончивый ответ ))

SaBo ★★
() автор топика

можно сделать так:

message Message { optional Registration registration = 1; optional Action1 action1 = 2; optional Action2 action2 = 3; ... }

или вот так:

message Message { required int32 msg_type = 1; extensions 10 to max; }

extend Message { optional Registration registration = 10; }

anonymous
()

Тоже на работе внедряется google protocol buffers. У меня решение твоей же проблемы такое: просто идет заголовок с некоторыми фиксированными полями и в нем уже идут TLV сообщения. А вот их внутрянка уже как раз protocol buffers...

I-Love-Microsoft ★★★★★
()

Для твоего случая примерно вот так:

message Envelope {
required Header header = 1;
required bytes body = 2;
}

Соответсвенно в body будет сериализованный экшн.

Поле action в Header можно сделать enum-мом.

dizza ★★★★★
()
Ответ на: комментарий от anonymous

Читал и, честно говоря, нифига не понял как это работает. По крайней мере мой способ очевиден. Если не влом, не покажешь как пользоваться этим self-desc?

dizza ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.