Изучаю protobuf, столкнулся с такой бедой. Допустим, есть такой .proto:
syntax = "proto3";
package example;
message Kaboom {
uint64 data = 1;
}
message Oops {
uint64 data = 1;
}
Сообщения пересылаются по WebSocket между сервером на Golang и клиентом на JavaScript.
Сервер ожидает новых команд от клиента, и клиент может отправить как Kaboom так и Oops. Сервер не может знать наперед, какой тип сообщения придет, и тут возникает вопрос, а как же десериализировать данные, которые пришли через WebSocket не зная типа заранее?
Встречал где-то статью от 2011 года, где на похожий вопрос советовали создать message-обертку, в которую включить существующие типы, а на стороне сервера проверять, какое поле заполнено. Почему-то мне кажется, что это решение далеко от оптимального.
Надеюсь на полезные советы, спасибо что дочитали.