protoex
简介
protobuf 接口插件,依赖FFI实现
提供序列化和反序列化接口
使用方法
object ob := protoex.new_one();
ob.load(file.get_os_path_from_script_path("/test/proto/"), "test.proto");
mixed data = {"id" : 10, "name" : "aaa"};
// 序列化
string buf = ob.pack("test", data);
// 反序列化
mixed ret = ob.unpack("test", buf);
使用优势
- 包体小,protobuf由于提供了描述符文件,定义了每个变量的数据类型,包体可以压缩的很小
- 静态编译,序列化反序列化高效
性能对比
ps
均采用动态序列化的方式进行测试
类型 | 序列化开销 | 反序列化开销 | 总开销 | 包体大小 |
---|---|---|---|---|
Protobuf | 177(ms) | 126(ms) | 303(ms) | 37 Bytes |
Msgpack | 79(ms) | 183(ms) | 262(ms) | 62 Bytes |
说明
- msgpack的序列化速度比protobuf要快一些,但反序列化要比protobuf要慢一些,但总体都接近
- msgpack可以直接序列化类对象,但protobuf需要先写描述映射文件(.proto)
- msgpack支持的基本类型比protobuf支持的要全面些
- msgpack的包体要比protobuf大很多
使用结论
- 如果追求极致性能,并且节省流量,建议使用protobuf静态编译的方式
- 如果追求开发的方便性,建议使用msgpack,自由度高,性能也很优越,包体稍大
组件接口
protoex.gs
函数原型 | 函数作用 |
---|---|
object new_one() | 创建一个protobuf实例对象 |