我是刚学go的小白,最近参考golang服务器写了一个通讯程序,golang作为服务器用tcp连接unity3d,传输消息用的是protobuf。但是目前遇到一个问题就是客户端发送消息过来(有可能是各种消息,角色移动,角色请求,角色死亡等)服务器这边如何判断具体应该是哪一个消息呢?我给消息加了消息头原本是想通过消息头判断的,但是才发现protobuf在反序列化的时候就必须指定类型了,例如:
mp := &message.ConnetInf{}
err := proto.Unmarshal(data, mp)
反序列化时必须指定mp是我发送的ConnetInf消息。但是目前问题是在我不确定mp是什么类型的时候该如何反序列化呢?不知有没有做过的大神给指点一两句。谢谢了T T
我的做法是
message TransMsg
{
optional int32 kind_id;
optional int32 sub_id;
optional bytes buff;
}
作为传输前的被序列化的最终报文
然后具体的业务逻辑报文转成TransMsg.buff
例如
message Dead
{
optional int32 user_id;
optional string reason;
}
dead.SerializeToString(buff)
#7
更多评论