типа
test := &example.Test{}
data, err := proto.Marshal(test)
newTest := &example.Test{}
err = proto.Unmarshal(data, newTest)
А если у меня открыто tcp соединение в которое я кидаю разные сообщения protobuf, как детектить какое сообщение пришло?
Если в первый байт пакета писать его идентификатор, и на принимающей стороне его считывать
получается что-то типа
switch(recvBytes[0]){
case 0:
msg := &pbMessage1{}
if proto.Unmarshal(recvBytes[1:], msg) != nil{
return
}
case 1:
msg := &pbMessage2{}
if proto.Unmarshal(recvBytes[1:], msg) != nil{
return
}
case 2:
msg := &pbMessage3{}
if proto.Unmarshal(recvBytes[1:], msg) != nil{
return
}
}
Отправка сообщений - аналогичный свич, который пишет в первый байт id пакета
Это просто ужастно, глаза текут от такой фигни
Как сделать по нормальному?
мы тут в личке поговорили, и пришли к выводу, что надо просто взять grpc
Обсуждают сегодня