五、lua的语法( 三 )


repeat循环体until 条件
function testRepeat()local i = 10repeatprint(i)i=i-1until i < 1end
for循环
数值型for循环
语法
for param=exp1,exp2,exp3 do循环体end
param的值从exp1变化到exp2之前的每次循环会执行 循环体,并在每次循环结束后将步长(step)exp3增加到param上 。exp3可选,如果不设置默认为1
for i = 1,100,10 doprint(i)end
泛型for循环
泛型for循环通过一个迭代器函数来遍历所有值,类似于java中的语句 。
语法
for i,v in ipairs(x) do循环体end
i是数组索引值,v是对应索引的数组元素值,是Lua提供的一个迭代器函数,用来迭代数组,x是要遍历的数组 。
例如:
arr = {"TOME","JERRY","ROWS","LUCY"}for i,v in ipairs(arr) doprint(i,v)end
但是如果将arr的值进行修改为
同样的代码在执行的时候,就只能看到和之前一样的结果,而其中的x为JACK就无法遍历出来,缺失了数据,如果解决呢?
我们可以将迭代器函数变成pairs,如
for i,v in pairs(arr) doprint(i,v)end
六、模块概念
淘宝开发的模块通过将lua解释器集成进Nginx,可以采用lua脚本实现业务逻辑,由于lua的紧凑、快速以及内建协程,所以在保证高并发服务能力的同时极大地降低了业务逻辑实现成本 。
模块环境准备
概述
前面我们提到过,是由淘宝工程师开发的,所以其官方网站()我们读起来是非常的方便 。是一个基于Nginx与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项 。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关 。所以本身内部就已经集成了Nginx和Lua,所以我们使用起来会更加方便 。
安装
(1) 下载OpenResty:https://openresty.org/download/openresty-1.15.8.2.tar.gz(2)使用wget下载: wget https://openresty.org/download/openresty-1.15.8.2.tar.gz(3)解压缩: tar -zxf openresty-1.15.8.2.tar.gz(4)进入OpenResty目录: cd openresty-1.15.8.2(5) 执行命令:./configure(6) 执行命令:make && make install(7)进入OpenResty的目录,找到nginx:cd /usr/local/openresty/nginx/(8)在conf目录下的nginx.conf添加如下内容location /lua{default_type 'text/html';content_by_lua 'ngx.say("HELLO,OpenRestry")';}(9)在sbin目录下启动nginx(10)通过浏览器访问测试
的使用
使用Lua编写Nginx脚本的基本构建块是指令 。指令用于指定何时运行用户Lua代码以及如何使用结果 。下图显示了执行指令的顺序 。
先来解释下*的作用
*:无 , 即 xxx_by_lua ,指令后面跟的是 lua指令*:_file,即 xxx_by_lua_file 指令后面跟的是 lua文件*:_block,即 xxx_by_lua_block 在0.9.17版后替换init_by_lua_file
*
该指令在每次Nginx重新加载配置时执行,可以用来完成一些耗时模块的加载,或者初始化一些全局配置 。
*
该指令用于启动一些定时任务,如心跳检查、定时拉取服务器配置等 。
*
该指令只要用来做变量赋值,这个指令一次只能返回一个值,并将结果赋值给Nginx中指定的变量 。
*
该指令用于执行内部URL重写或者外部重定向,典型的如伪静态化URL重写,本阶段在处理阶段的最后默认执行 。