入职作业之 json 数据与 lua value 转换
题目任务描述:封装json格式的数据与lua value间的互相转换功能
下载ECMA-404的描述文件,观察json的数据格式。
根据描述,一个json value可以是这些类型: object, array, number, string, true, false, or null。
下面是描述几种数据类型的图。
这些图的描述能力应该等同BNF,所以需要处理的操作大概有:
串联 如,C等于A串联B(C=AB),即匹配一个C等同于匹配一个A接着匹配一个B
并联 如,C等于A并联A(C=A
B),即匹配一个C等同于匹配一个A或者匹配一个B
匹配0或1次 如,C等于匹配A0或1次(C=A?),即匹配一个C等同于匹配一个A0或多次,该操作可以由 C=A
”” 代替,其中”“表示空串。
...
luajit
JIT = Just In TimeIOS中禁止使用(不让自主申请内存)
解释执行:
效率低
代码暴露
静态编译
不够灵活,无法热更新
平台兼容性差
JIT:
效率:高于解释执行,低于静态编译。
安全性:一般都先转换成字节码
热更新:无论源码还是字节码本质都是自愿文件。
兼容性:虚拟机会处理平台差异,对用户透明。
Mac下安装lua
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
以官网的Lua 5.3.5版本为例。
12345curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gztar zxf lua-5.3.5.tar.gzcd lua-5.3.5make linux testmake install
有时候权限不够,使用sudo命令
此版本的lua不带测试例子,需要自己写一个hello.lua:
1print("Hello World!")
然后执行
1lua hello.lua
会得到如下的输出:
1Hello World!
mac安装测试完。
nginx + lua 开发中过程中 post body 过大返回 4xx
背景基于 OpenResty 提供 post 接口,调用方调用该接口 post 数据,该接口接收 post 过来的数据,复用 Nginx access 日志落盘。
问题当用户的 body 体过大时,ngx.req.get_body_data() 读请求体,会出现读取不到直接返回 nil 的情况。
问题原因究其原因,主要是 Nginx 诞生之初主要是为了解决负载均衡情况,而这种情况,是不需要读取 body 就可以决定负载策略的,所以这个点对于 API Server 和 Web Application 开发的同学有点怪。
解决办法
如果你只是某个接口需要读取 body(并非全局行为),那么这时候也可以显示调用 ngx.req.read_body() 接口
如果想全局生效的话需要使用命令lua_need_request_body on;
当选择上述其中一种,甚至两种方案都使用了,依旧还解决不了问题,这时候,需要坚持 body 体是不是太大了。这是需要设置如下两个命令:12client_body_buffer_size 256k; #默认8k|16kclient_max_body_size ...
Redis慢查询、Pipeline、事务与Lua、Bitmaps、发布订阅
Redis提供的5种数据结构已经足够强大,但除此之外,Redis还提供了诸如慢查询分析、功能强大的Redis Shell、Pipeline、事务与Lua脚本、Bitmaps、HyperLogLog、发布订阅、GEO等附加功能,这些功能可以在某些场景发挥重要的作用。
慢查询分析许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能。
Redis客户端执行一条命令经历4个过程:发送命令、命令排队、命令执行、返回结果
慢查询的两个配置参数slowlog-log-slower-than: 它的单位是微秒,默认值是10000,假如执行了一条“很慢”的命令(例如keys*),如果它的执行时间超过了10000微秒,那么它将被记录在慢查询日志中。slowlog-log-slower-than=0会记录所有的命令,slowlog-log-slower-than<0对于任何命令都不会进行记录。
...
cocos2dx lua 热更新原理与实战
首先,如果有过cocos2dx lua开发经验的朋友都知道,为什么使用Lua而不是C++,最重要的原因就是因为下面这三个原因
热更新(在线更新代码和资源)
比C++简单很多,入门和实战
轻量级,最小最轻的脚本语言
今天就从Lua热更新,捣鼓一下其中的原理,并具体实战一下!
什么是热更新?热更新也叫不停机更新,是在游戏服务器运行期间对游戏进行更新。实现不停机修正bug、修改游戏数据等操作。也可以这样讲:一辆车以时速150km跑着,突然爆胎了,然后司机告诉你,我不停车,你去把轮胎换了,小心点。
热更新的作用Lua模块热更新原理,能很好的支持代码热更新机制,是大部分选择要嵌入脚本语言的原因之一。好处很简单,脚本代码可以热更新的话,调试和线上解决问题都可以不用重启程序了,对开发效率有很大的帮助。
热更新原理Lua内部提供了一个require函数,来实现模块的加载,它做的事情主要是以下几个:
在registry[“_LOADED”]表中判断该模块是否已经加载过了,如果是则返回,避免重复加载某个模块代码。
依次调用注册的loader来加载模块,将加载过的模块赋值给registry[“_LO ...
ulua的简单解析,cs和Lua的相互调用
热更新是unity一个长久的话题,热更新主要有两部分,一部分就是资源,这个靠u3d的assetbundle就可以做,另一部分就是逻辑了。游戏更新难免会遇到一些流程或者UI的逻辑变动。在PC和Android上可以使用C#的反射来动态的生成代码,而IOS的Full AOT(完全 预先编译/静态编译)的性质,因此这个办法在IOS上使用不了。为了解决这个问题,我们引入了Lua。使用Lua的主要原因是因为Lua在Unity是当作文本资源使用的,Lua在Unity中的执行是依赖于解释器(虚拟机)读取Lua代码进行解释执行。所以工程中比较常变化的逻辑代码都是写在Lua中,通过更新Lua(文本文件)来实现逻辑的热更,而常用的热更新方案有sLua,xLua,uLua等等。公司这里使用的是ulua,因此今天就来初步解析并使用下uLua。为了方便学习,本文章使用的是SimpleFramework_NGUI_v0.4.1,这个集成了NGUI,uLua的框架。
1.简单认识uLua
uLua具体怎么去调用Lua的,怎么让Lua调用C#这里先不做具体研究,先简单地使用起来,不去探究原理了。我们先认识下uLua中 ...
在openresty中是使用lua脚本实现新老路由平滑升级
想升级PHP框架phalcon到3.x, 但是发现升级后与老版本基本不兼容, 也就意味着代码基本要重写了。考虑到不可能一下把所有的接口切换到新的框架上去(不能短时间内全部迁移所有的接口,新的框架提供的接口需要测试时间)。想到的方案是, 一方面提供新的接口使用新的框架编写,然后网关判断, 如果是新的接口就路由到新的框架部署的服务器上。空闲的时间,慢慢的把老的接口往新的框架上迁移。一下简单的实现了一个demo案列。
环境以及依赖软件
window 10。
openresty/1.13.6.1 提供网关服务。
redis-server 提供新路由存储。
golang 模拟提供web服务。
这里不对openresty, golang做介绍了。
openresty配置
编辑nginx.conf文件, 默认使用phalcon1upstream,当rewrite_by_lua_file执行完后, 如果是新的路由, 会重写phalcon1到phalcon3。
123456789101112131415161718192021222324252627upstream phalcon1 { se ...
Anguluar的基本基本概念(一)
带着问题学习,效果可能更好一些,本文基于 Angular 1.5.8 版本.
1.AnguluarJS是什么?
AngularJS是一款由Google公司开发维护的前端MVC框架.
作用:克服了HTML在构建应用上的诸多不足,降低开发成本,提升开发效率。
2.AnguluarJS与jQuery有什么区别?
jQuery准确地来说只是一个类库(类库指的是一系列函数的集合),以DOM元素做为驱动(核心).
AngularJS则一个框架(诸多类库的集合),以数据和逻辑做为驱动(核心),框架对开发的流程和模式做了约束,开发者遵照约束进行开发,更注重的实际的业务逻辑.
3.不得不提一嘴的MVC,MVVM?
3.1 MVC是一种软件架构设计的思想,将软件按照模型、视图、控制器来划分。模型负责封装业务逻辑和数据;视图负责输入和输出,控制显示界面交互;控制器负责协调模型和视图。
Model(模型):模型是应用程序的主体部分,通常用于处理应用程序的业务数据,或者业务逻辑部分.
View(视图):视图是应用程序中处理用户界面显示的部分,通常视图是依据模型数据创建的.
controller(控制器):应 ...
Lua标准库阅读总结(官方文档)
Contents
</div>
<p>Lua的标准库直接通过C语言的API进行实现的。有一些函数对于这个语言提供的功能是必不可少的(例如getmetatable和type又元表是lua的一个重要语言特性,还会总结哒)其他的提供了一些输出到外部的功能(例如IO)还有一些很有用的但是用lua自身进行实现的一些函数(例如table.sort)</p>
库的大纲所有的库都是通过官方的C语言的API就像C的API的一样的进行分离。
1.basic library
2.coroutine library
3.package library
4.string manipulation
5.basic UTF-8 support
6.table manipulation
7.mathematical functions
8.input and output
9.operating system facilities
10.debug facilities
还有一堆废话告诉你这些库使用什么调用的。
1.Basic Function ...