Protobuf与lua服务端
来源:互联网 发布:上淘宝网怎么注册 编辑:程序博客网 时间:2024/05/20 03:06
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脚本
local resTable = {}local resp = {id = 11,value = 6}local resp1 = {id = 12,value = 7}table.insert(resTable,resp)table.insert(resTable,resp1)local arrayTestData = {testModel = resTable}c_rpc.reply_to(ctx, pb.encode("test.ArrayTestData", arrayTestData))
其实是很简单的东西,但是由于一个小问题,导致我花了一下午才捣鼓出来,所以就贴出来,防止自己下次再犯错。之前在lua脚本里面我是这么写的local arrayTestData = {resTable}
,因为参见上面protobuf的协议设计,直观的认为test.ArrayTestData仅仅是一个存放test.TestModel数据类型的一个数组而已。其实逻辑就错在了这里,是test.ArrayTestData里面的一个数据成员testModel这个对象才是存放数组的,所有必须要使用testModel = resTable,否则会编码出错。
- Protobuf与lua服务端
- protobuf 与lua的结合
- Lua protobuf相关API
- lua&protobuf使用
- protobuf lua源码解析
- cocos2dx lua集成protobuf
- protobuf for lua
- protobuf for lua 实现
- cocos2d-lua 集成protobuf
- Unity lua Protobuf 开发
- lua下使用protobuf
- SuperSocket与Netty之实现protobuf协议,包括服务端和客户端
- cocos2dx使用lua和protobuf
- cocos2dx使用lua和protobuf
- cocos2dx使用lua和protobuf
- ctags支持lua和protobuf
- cocos2dx使用lua和protobuf
- cocos2dx使用lua和protobuf
- 获得任意时间的下一天时间 java
- 更新struts2到2.3.32
- Linux的shell命令1
- LVW(Las Vegas Wrapper)特征选择算法简单介绍
- 好看的分割线\(^o^)/~
- Protobuf与lua服务端
- 简单工厂模式浅析
- 无线网络概论
- poj 1260 Pearls (DP)
- VLOOKUP
- Java中的IO流系统详解
- 激发你创意的碎碎语公众平台应用。
- 摘要验证浅析
- 没做程序员,没做算法工程师,现在是一名审查员