本项目提供在 Lua 全版本(5.1+、LuaJIT)下的protobuf 2/3 版本支持。提供了高级的消息编码/解码接口以及底层的protobuf wireformat 二进制数据操作接口。 使用高级接口,你需要通过pb.load()接口导入 protobuf 的消息描述文件(schema文件,.proto后缀名)的二进制版本(本质上是schema文件通过官方的FileDescriptorSet编码...
对上述编码后的数据进行解析,protobuf需要100-200纳秒;而XML则需要5000-10000纳秒。 4、与XML相比,protobuf的缺点是不易读。众所周知,XML是一种自描述语言,一看就可知道其作用,见文知意。而protobuf序列化后是一串二进制代码,如果没有对应的协议格式(即.proto文件),想要读懂它难如登天。另外,如果目标是一种基于...
lua_Number ln = (lua_Number)strtod((const char*)f->default_value, &end); if ((const char*)f->default_value == end) return 0; ret = 1, lua_pushnumber(L, ln); } else if (is_proto3) ret = 1, lua_pushnumber(L, 0.0); break; default: if (f->default_value) { lua_Intege...
1,opt,name=name,proto3" json:"name,omitempty"` Age int64 `protobuf:"varint,2,opt,name=...
项目使用 protoc-gen-lua 来生成lua的pb在lua中调用。但遇到如下问题: 1.获取pb长度为0,实际上pb中有数据 解决方法,添加一个无用字段 2.获取不到...
syntax = "proto3" 表示使用proto3版本,默认使用proto2版本。 optional 表示当前字段可选,非必填。 string name = 1 每个字段需要有一个唯一的号码,必须大于0。 enum 表示枚举类型。 repeated 表示可重复, message 可以嵌套 protobuf 的一大特点就是通过 “代码生成” 数据结构类的方式来序列化、反序列化二进制...
protobuf 使我们经常使用的通信数据传输格式,为了方便lua直接使用proto 生成的文件,使用了protoc-gen-lua 工具,但是这个使用嵌套的proto 文件时,protoc.exe 无法正常引用,报错找不到对应的文件。所以后来参考下面两篇文章,修改了 protoc-gen-lua 这个Python文件,得到了想要的结果。废话不多说,直接上图: ...
配置表有非常多形式:xml、json、SQLite、ScriptObject、protobuf等等。 基于lua开发的项目,我想很多人还是直接把配置表导成lua table。如果直接kv的方式,显然内存和解析时间都不是最优的。 于是我们有了一些优化方案: 第一种、将出现最多的字段提取成默认值。
git clone https://github.com/starwing/lua-protobuf luarocks make rockspecs/lua-protobuf-scm-1.rockspec If you don't have luarocks, usehererocksto install Lua and luarocks: pip install hererocks git clone https://github.com/starwing/lua-protobuf ...
for enum_value in enum_desc.value: env.message.append('%s = %d\n' % (enum_value.name, enum_value.number)) for msg_desc in proto_file.message_type: code_gen_message(msg_desc, env) if is_gen: lua = Writer() write_header(lua) lua('local protobuf = require "protobuf"\n') for...