protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
之前一直不知道protobuf还有类似数组的这种数据类型,在游戏服务端和客户端交互时总是人为的去构造一直数据类型来解析传递到客户端的链表数据。总觉得很不方便,今天再次看了下官方文档,发现repeated字段便能实现类似数组的功能,这令我大为欣喜。主要之前为了求快,不断满足公司demo的功能,没有仔细看协议变依葫芦画瓢开始开发了,果然这样子有点费力不讨好。
由于游戏的服务端采用的是Lua来写逻辑,这里就记录下如何用lua来构造数据并编码的。
syntax = "proto2";
package test;
import "empty_msg.proto";
// 功能测试
service Test {
rpc TestArray(rpc.EmptyMsg) returns (ArrayTestData);
}
message TestModel
{
optional int32 id = 1;
optional int32 value = 2;
}
message ArrayTestData{
repeated TestModel testModel = 1;
}
对应的Lua脚本