Unreal UnLua + Lua Protobuf
https://protobuf.dev/
protobuf wire format:pb 编译到底层的数据协议
https://github.com/starwing/lua-protobuf/blob/master/README.zh.md
buffer 处理
lua string 可以当 buffer 用,# len 不会遇到 0 截断,注意和 cstring 的区别
UE FString 有点坑
- UnLua FString => lua string 用的 lua_pushstring,会遇到 0 截断
- FString 本身是带编码的,当 buffer 还是。。
哎,稳妥的做法还是 TArray<uint8>
,这样先把业务跑起来了
这块最好还是手写 Lua C API 来减少传递的 overhead,避免重复拷贝
序列化测试
发现和 C++ PB 序列化出来的结果不一样,咨询了下作者, Lua PB 默认是随机字段顺序
开启 encode_order 即可,不过仅限开发测试用,性能差
pb.option("encode_order")