发布网友 发布时间:2022-04-23 09:10
共2个回答
热心网友 时间:2023-10-09 03:25
unity在lua中用protobuf可以在PC或者移动设备上使用。
lua-protobuf的高层接口:
pb.dll 提供四个模块:
1、pb模块:高层接口,提供和pbc兼容的encode/decode接口。
2、pb.conv:这是一个转换工具库,负责在Lua里方便地在protobuf提供的各种类型和Lua原生类型之间转换。
3、pb.slice:提供了底层的protobuf协议解析能力,能够在不知道message的情况下解析协议二进制数据。
4、pb.buffer:提供了底层的protobuf的协议序列化能力,能够在不知道message的情况下序列化信息。
5、http://pb.io:这个主要是为写protoc插件使用的。protoc会把pb二进制文件通过stdin传递给插件,然而stdin在Windows下默认是用文本模式打开的,这就会导致解析错误。因此http://pb.io提供了二进制模式下的IO读写功能。
lua-protobuf高层接口还提供了这些函数:
1、pb.clear(),清除之前注册的所有消息。
2、pb.clear(msgName),清除某个之前注册的消息
3、pb.load(chunk),直接解析字符串/Slice格式的二进制pb数据注册消息。
lua-protobuf底层接口:
底层接口和C接口主要的功能是在没有/不知道pb数据的情况下,解析二进制的protobuf数据。通常情况下是用不上的,如果有需求的话后续会在这里更新使用说明。
热心网友 时间:2023-10-09 03:25
客户端lua,通信协议是protobuf,以前用网易的proto-gen-lua,使用过程遇到些问题需要绕,比如:
1、每次更改、增加proto都要生成新的文件,代码规模剧增
2、由于lua本身,每个文件最大文件内全局local变量不能超过200个,所以当proto规模太大时,生成的
lua文件就不能用,需要把proto拆分
3、我之前做proto-gen-lua的集成,好像使用protobuf2.5的不行,*只能用2.4了,然后对proto里message
的格式支持不全,比如message内包含其他的message是不行的,无奈只能把要包含的message定义再写
在message内部
最近新项目,想研究下protobuf的动态解析,于是在github上发现了这个项目:
https://github.com/zhanjunxiong/luapb
项目里先把protobuf集成进来,然后把这个luapb的cpp文件也加进来,luapb这个项目里的Singleton.h不是跨平
台的,可以自己修改下 单例的代码,然后就可以用了
这几天折腾的时候遇到点bug,给作者提交后作者很快修复了,具体用法,可以参考项目的test例子,也可以到
issue列表去查看:
https://github.com/zhanjunxiong/luapb/issues/2
动态解析的序列化反序列化效率肯定比生成代码差很多,所以高并发server可能不适用,客户端没太大影响