protobuf lua 版注意点
来源:互联网 发布:新媒体矩阵建设方案 编辑:程序博客网 时间:2024/05/16 23:01
引言:
在 Unity 中接入 tolua 热更框架之后,假如我们使用 protobuf 来定制协议,那么也需要引入 lua 的版本,这里我记录一下我踩过的一些坑点。
repeated 类型:
假设我们定义了一个请求包和回包的结构如下:
//玩家信息数据结构message PlayerInfo{ required string Name = 1; required int32 Id = 2;}//请求包message GetPlayerListReq{ repeated int32 Ids = 1;}//回包message GetPlayerListRes{ repeated PlayerInfo players = 1;}
大概的功能就是客户端向服务器发送一个要查询的玩家 id
列表,服务器把对应 id
的玩家信息 PlayerInfo
列表下发下来,这就涉及到构造数据包和解析数据包的过程了,序列化和反序列化的过程在这里就不做赘述了,主要说一下在 lua 下的几个要点:
构造 repeated 基础数据类型:
基础数据类型列表要用
:append()
接口来插入,不能使用table.insert
来插入:local req = GetPlayerListReq()for i=0,4 do req.Ids:append(id)end
构造 repeated 结构数据类型:
复杂数据结构类型的数据列表需要使用
:add()
来创建,然后挨个属性复制,不能直接把一个属性相同的数据结构直接赋值给它:local res = GetPlayerListRes()for i=0,4 do local player = req.players:add() player.Name = name player.Id = idend
不能直接使用下面的方式赋值:
local res = GetPlayerListRes()res.players = players
解析 repeated 数据类型:
我们通常使用以下方式来遍历一个 table ,这里以服务器解析 id 列表为例:
for k,v in pairs(req.Ids) do ...end
但是假如这里我们使用上述的办法遍历列表就会发现 v 出现了为 nil 的情况,现在就是遍历不准确了,当然可以做如下优化得到正确的结果:
for k,v in pairs(req.Ids) do if v ~= nil then ... endend
但是很麻烦,而且不准确,对于 protobuf 中定义的数据中包含的 table 数据需要使用
ipairs
来进行遍历,基础数据类型跟复杂数据结构都是一样的:for k,v in ipairs(req.Ids) do ...end
阅读全文
0 0
- protobuf lua 版注意点
- LUA注意点
- Lua代码编写注意点
- lua一些容易注意点
- Lua代码编写注意点
- C++ --》 lua cocos 注意点
- Lua灵活的语法注意点
- 推荐个protobuf的lua版
- Lua protobuf相关API
- lua&protobuf使用
- protobuf lua源码解析
- cocos2dx lua集成protobuf
- protobuf for lua
- protobuf for lua 实现
- cocos2d-lua 集成protobuf
- Protobuf与lua服务端
- Unity lua Protobuf 开发
- lua下使用protobuf
- 【Android自定义View】仿Photoshop取色器ColorPicker(四)完结篇
- JAVA获取服务器路径的方法
- 使用Glide的一个优化
- ZooKeeper server连接状态
- 《HTML5权威指南》之使用边框和背景
- protobuf lua 版注意点
- 【机器学习-西瓜书】三、线性回归;对数线性回归
- 横向菜单和xlistview
- 如何用化学软件绘制制高分子链
- Tips of Lua
- 阿里云CentOS 7.3安装Redis3.2.6详细步骤(自己有修改)
- 页面中提示确认信息的用处
- spring+mybatis框架搭建
- 远程管理利器Xshell Putty Xftp免费视频