name5566 / leaf

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

关于protobuf msg id自动生成的设计 #133

Closed w19787 closed 5 years ago

w19787 commented 5 years ago

初步接触leaf,对这个id还是不能理解为什么要自动生成?这个id是由服务器消息注册顺序决定的,那如何做到向后兼容呢?

比如游戏客户端发布了1.0版本,消息id m1.0. 而后服务端注册顺序发生变化了,这样客户端消息不是不兼容了吗?每次都强制客户端升级?

name5566 commented 5 years ago

相关讨论:https://github.com/name5566/leaf/pull/88 https://github.com/name5566/leaf/issues/26

说一下为什么选择自动生成的方式:

  1. 自动生成的方式简单不容易出错
  2. 如果服务端消息发生改变客户端不改变的情况很少
  3. Leaf 的自动生成方案可以支持消息兼容的问题

这里主要说一下如何做到服务器和客户端消息版本不一致。消息注册的顺序决定了消息的 ID。保持兼容的几种情况:

这样可以保证新的消息兼容旧的客户端。

w19787 commented 5 years ago

多谢作者答复。我后续实践下看看,目前理解下来还是合理的设计。

w19787 commented 5 years ago

关闭这个问题。