name5566 / leaf

A game server framework in Go (golang)
Apache License 2.0
5.26k stars 1.31k forks source link

protobuf自动生成的id为什么不使用名称而用注册顺序 #162

Closed ldwangaqr closed 5 years ago

ldwangaqr commented 5 years ago

感觉自动生成的id用注册顺序跟前端同步很麻烦啊 用 len | id | message 这样也不用管注册的顺序了 Processor改成 msgInfo map[string]*MsgInfo msgID map[reflect.Type]string 不是会方便很多,希望大佬能给我指点一下

name5566 commented 5 years ago

消息 ID 用 string 吗?主要是效率问题。

ldwangaqr commented 5 years ago

消息 ID 用 string 吗?主要是效率问题。

一个消息名称多十几个字节,跟总的消息体量比就相当于每个消息多加了一个字段,但是开发起来会方便很多吧,而且前端是unity还好。如果是h5游戏,还要用Lua会不会有点不太方便

ldwangaqr commented 5 years ago

消息 ID 用 string 吗?主要是效率问题。

用string除了体积增大,还有啥其他方面的性能问题吗?

name5566 commented 5 years ago

不在意性能问题可以使用 JSON。有一些游戏,消息体可能很小,比如说,2 - 4 个字节,而且这种消息比较频繁发送,比如说,MMORPG 中的移动。使用 string 作为消息 ID 的时候,可能导致消息 ID 大于消息体本身。如果不在意效率问题,使用 JSON 更加方便。protobuf 本身是很在意效率问题的,因此必定会导致一些便利性上的牺牲。

另外,protobuf 自动生成 ID 在实践中是非常可靠也很方便的,详细查看相关 issues。

ldwangaqr commented 5 years ago

不在意性能问题可以使用 JSON。有一些游戏,消息体可能很小,比如说,2 - 4 个字节,而且这种消息比较频繁发送,比如说,MMORPG 中的移动。使用 string 作为消息 ID 的时候,可能导致消息 ID 大于消息体本身。如果不在意效率问题,使用 JSON 更加方便。protobuf 本身是很在意效率问题的,因此必定会导致一些便利性上的牺牲。

另外,protobuf 自动生成 ID 在实践中是非常可靠也很方便的,详细查看相关 issues。

非常感谢