Protocol - changnet/MServer GitHub Wiki
这里采用了自动打包、解包的协议处理。方式原本设定为自定义二进制、Flatbuffers、Protobuf,不过现在只调试了Protobuf。
协议内容分为底层协议头和协议内容。协议内容在Lua脚本中以table表示,为kv结构。
底层协议头分为多种,根据打包方式和通信方式不同而不同。如果是TCP,则协议头定义在C++的header_include.h文件中,可以方便地修改。如果是websocket,则在ws_stream_packet.cpp中处理。
新项目时,可以前后端约定,以后就不再需要修改了。
协议结构目前使用protobuf
的proto文件格式来定义,并且通过shell/auto_proto.sh
自动生成协议号,只需要手动在server/proto/cs.lua
定义一个协议名字即可。
有不用旧的客户端没有使用protobuf而是自定义的流协议,这时候仍然是建议使用proto
文件来定义协议结构,然后解析proto
文件,自己实现协议的打包、解包即可。
由于采用了自动打包、解包的方式,会造成大量的Lua table需要gc。对于MMOARPG游戏中大量的移动、攻击的数据包,这个是会导致gc压力太大。不过这类数据包的特点是结构简单。因此对这几个特殊的协议采用特殊的打包解包方式,即把数据放在Lua的栈上即可,不创建table。