我是刚学go的小白,最近参考golang服务器写了一个通讯程序,golang作为服务器用tcp连接unity3d,传输消息用的是protobuf。但是目前遇到一个问题就是客户端发送消息过来(有可能是各种消息,角色移动,角色请求,角色死亡等)服务器这边如何判断具体应该是哪一个消息呢?我给消息加了消息头原本是想通过消息头判断的,但是才发现protobuf在反序列化的时候就必须指定类型了,例如:
mp := &message.ConnetInf{}
err := proto.Unmarshal(data, mp)
反序列化时必须指定mp是我发送的ConnetInf消息。但是目前问题是在我不确定mp是什么类型的时候该如何反序列化呢?不知有没有做过的大神给指点一两句。谢谢了T T
大神,我又遇到点小问题。就是服务器接收到客户端消息之后如何根据消息头去创建对应类型的protobuf去解码消息体。我感觉用switch判断后期消息多了会很复杂。c#客户端我是使用委托字典,key保存消息头,value保存具体方法,在方法里来创建对应的protobuf来解码消息。golang这边没有委托无法接收方法就没法像c#这样用。所以还麻烦大神给说一下。具体内容可以看我另一个提问帖:http://studygolang.com/topics/1976
#6
更多评论