公司的棋牌游戏菜单打算采用lua来从mysql数据库中取出,根据各种蛋疼的规则,然后生成json返回给客户端,这样客户端只要解析json生成菜单树即可,排序,节点属性,显示等等一切逻辑都被记录在json字符串中,由于数据库中记录的菜单数据比较原始,所以lua承担了比较繁重的逻辑和重新组合节点的任务,捎带还要有缓存支持。
首先说明下为什么会选择lua去生成这个json字符串,最主要的原因当然是性能问题,luajit可以算是最快的脚本语言了,同时配合nginx的高效,我们可以无状态的横向部署多台nginx作负载均衡,毕竟对于几万人在线的公司棋牌游戏菜单获取压力也着实不小。
其次因为之前公司很多对外api前端逻辑和下载统计等都是用lua来处理的,其性能和稳定性都不错,也算尝到了甜头,所以这次菜单的功能也顺理成章的使用lua来处理了。
但是这次游戏菜单会根据不同的站点生成不同的json,还有其他一些逻辑,节点的父类子类总之比较麻烦,所以我在编写这个lua脚本时也遇到了一些坑。
1、lua字符串转时间,时间转字符串
在编写整个脚本时,遇到的第一个问题就是lua对时间和字符串的互转,下面是一个用到的时间戳格式化当前时间的代码:
local now = os.date(“%Y-%m-%d %H:%M:%S”, os.time())
时间戳转时间字符串还算顺利,可是当我想通过从数据库查询出的时间字符串转换成lua的时间类型时就蛋疼了,搜了一会发现都要自己重新实现,最终在github上发现了一个外国朋友写的date.lua类,非常不错分享给大家:
项目地址:https://github.com/Tieske/date
把文件夹下的date.lua放入openresty定义的lib目录中,直接requrie即可使用,非常方便,他也拥有很多api功能,具体请参阅github项目帮助文档。
local dateLib = require “date”
…
updatetime = dateLib(tonumber(updatetime)):tolocal() — 这边比较坑,要转成local,否则差8小时
..
local writetime = dateLib(v[‘writetime’])
这样我就可以将时间戳或时间字符串转换成lua的date类型了,同时date类型之间还能够进行”>”或”
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?