Protocol - changnet/MServer GitHub Wiki

协议

这里采用了自动打包、解包的协议处理。方式原本设定为自定义二进制、Flatbuffers、Protobuf,不过现在只调试了Protobuf。

协议内容分为底层协议头和协议内容。协议内容在Lua脚本中以table表示,为kv结构。

底层协议头

底层协议头分为多种,根据打包方式和通信方式不同而不同。如果是TCP,则协议头定义在C++的header_include.h文件中,可以方便地修改。如果是websocket,则在ws_stream_packet.cpp中处理。

新项目时,可以前后端约定,以后就不再需要修改了。

定义schema文件

协议结构目前使用protobuf的proto文件格式来定义,并且通过shell/auto_proto.sh自动生成协议号,只需要手动在server/proto/cs.lua定义一个协议名字即可。

有不用旧的客户端没有使用protobuf而是自定义的流协议,这时候仍然是建议使用proto文件来定义协议结构,然后解析proto文件,自己实现协议的打包、解包即可。

效率

由于采用了自动打包、解包的方式,会造成大量的Lua table需要gc。对于MMOARPG游戏中大量的移动、攻击的数据包,这个是会导致gc压力太大。不过这类数据包的特点是结构简单。因此对这几个特殊的协议采用特殊的打包解包方式,即把数据放在Lua的栈上即可,不创建table。

⚠️ **GitHub.com Fallback** ⚠️