不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2019-03-30 22:09  分类:OpenResty_Lua 

算术运算符、关系运算符、逻辑运算符、字符串连接、优先级

作者:php-note.com  发布于:2019-03-31 00:22  分类:OpenResty_Lua 

Lua 的设计有一点很奇怪,在一个 block 中的变量,如果之前没有定义过,那么认为它是一个全局变量,而不是这个 block 的局部变量。这一点和别的语言不同。容易造成不小心覆盖了全局同名变量的错误。

作者:php-note.com  发布于:2019-03-30 20:23  分类:OpenResty_Lua 

在 Linux、Mac OS X 上搭建环境

到 LuaJIT 官网 http://luajit.org/download.html,查看当前最新开发版本,例如笔者写书时的最新版本:http://luajit.org/download/LuaJIT-2.1.0-beta1.tar.gz

# wget http://luajit.org/download/LuaJIT-2.1.0-beta1.tar.gz
# tar -xvf LuaJIT-2.1.0-beta1.tar.gz
# cd LuaJIT-2.1.0-beta1
# make
# sudo make install
作者:php-note.com  发布于:2019-03-31 16:12  分类:OpenResty_Lua 

在 OpenResty 的体系中,可以通过共享内存的方式完成不同工作进程的数据共享,可以通过 Lua 模块方式完成单个进程内不同请求的数据共享。如何完成单个请求内不同阶段的数据共享呢?最典型的例子,估计就是在 log 阶段记录一些请求的特殊变量。

作者:php-note.com  发布于:2019-03-31 00:43  分类:OpenResty_Lua 

旧式的模块定义方式是通过 module("filename"[,package.seeall])* 来显式声明一个包,现在官方不推荐再使用这种方式。这种方式将会返回一个由 filename 模块函数组成的 table,并且还会定义一个包含该 table 的全局变量。

作者:php-note.com  发布于:2019-03-31 00:10  分类:OpenResty_Lua 

在 Lua 5.1 语言中,元表 (metatable) 的表现行为类似于 C++ 语言中的操作符重载,例如我们可以重载 "__add" 元方法 (metamethod),来计算两个 Lua 数组的并集;或者重载 "__index" 方法,来定义我们自己的 Hash 函数。Lua 提供了两个十分重要的用来处理元表的方法,如下:

  • setmetatable(table, metatable):此方法用于为一个表设置元表。
  • getmetatable(table):此方法用于获取表的元表对象。
作者:php-note.com  发布于:2019-03-30 23:30  分类:OpenResty_Lua 

在 Lua 中,函数 time、date 和 difftime 提供了所有的日期和时间功能。

在 OpenResty 的世界里,不推荐使用这里的标准时间函数,因为这些函数通常会引发不止一个昂贵的系统调用,同时无法为 LuaJIT JIT 编译,对性能造成较大影响。推荐使用 ngx_lua 模块提供的带缓存的时间接口,如 ngx.today, ngx.time, ngx.utctime, ngx.localtime, ngx.now, ngx.http_time,以及 ngx.cookie_time 等。

作者:php-note.com  发布于:2019-03-31 11:13  分类:OpenResty_Lua 

使用选项 --with-Components 激活组件,--without 则是禁止组件。 你可以根据自己实际需要选择 with 或 without。如下命令,OpenResty 将配置安装在 /opt/openresty 目录下(注意使用 root 用户),并激活luajit、http_iconv_module 并禁止 http_redis2_module 组件。

 # ./configure --prefix=/opt/openresty\
             --with-luajit\
             --without-http_redis2_module \
             --with-http_iconv_module
作者:php-note.com  发布于:2019-03-31 09:19  分类:OpenResty_Lua 

冒号操作会带入一个 self 参数,用来代表 自己。而点号操作,只是 内容 的展开。

作者:php-note.com  发布于:2019-03-31 11:19  分类:OpenResty_Lua 

首先你要安装 OpenResty 需要的多个库 请先配置好你的apt源,配置源的过程在这就不阐述了,然后执行以下命令安装OpenResty编译或运行时所需要的软件包。

# apt-get install libreadline-dev libncurses5-dev libpcre3-dev \
    libssl-dev perl make build-essential
作者:php-note.com  发布于:2019-03-31 15:45  分类:OpenResty_Lua 

有关 Nginx 的日志级别,请看下表:

ngx.STDERR     -- 标准输出
ngx.EMERG      -- 紧急报错
ngx.ALERT      -- 报警
ngx.CRIT       -- 严重,系统故障,触发运维告警系统
ngx.ERR        -- 错误,业务不可恢复性错误
ngx.WARN       -- 告警,业务中可忽略错误
ngx.NOTICE     -- 提醒,业务比较重要信息
ngx.INFO       -- 信息,业务琐碎日志信息,包含不同情况判断等
ngx.DEBUG      -- 调试

他们是一些常量,越往上等级越高。

作者:php-note.com  发布于:2019-03-30 22:32  分类:OpenResty_Lua 

Lua 中的 repeat 控制结构类似于其他语言(如:C++ 语言)中的 do-while,但是控制方式是刚好相反的。简单点说,执行 repeat 循环体后,直到 until 的条件为真时才结束,而其他语言(如:C++ 语言)的 do-while 则是当条件为假时就结束循环。

作者:php-note.com  发布于:2019-03-30 23:12  分类:OpenResty_Lua 

从 Lua 5.1 语言添加了对模块和包的支持。一个 Lua 模块的数据结构是用一个 Lua 值(通常是一个 Lua 表或者 Lua 函数)。一个 Lua 模块代码就是一个会返回这个 Lua 值的代码块。

作者:php-note.com  发布于:2019-03-31 09:51  分类:OpenResty_Lua 

为什么选择 Nginx?因为它具有以下特点:

1、处理响应请求很快
2、高并发连接
3、低的内存消耗

作者:php-note.com  发布于:2019-03-30 23:18  分类:OpenResty_Lua 

Lua 字符串库包含很多强大的字符操作函数。字符串库中的所有函数都导出在模块 string 中。在 Lua 5.1 中,它还将这些函数导出作为 string 类型的方法。这样假设要返回一个字符串转的大写形式,可以写成 ans = string.upper(s) , 也能写成 ans = s:upper()。为了避免与之前版本不兼容,此处使用前者。

作者:php-note.com  发布于:2019-03-30 23:09  分类:OpenResty_Lua 

调用回调函数,并把一个数组参数作为回调函数的参数。

local args = {...} or {}
method_name(unpack(args, 1, table.maxn(args)))
作者:php-note.com  发布于:2019-03-30 18:55  分类:OpenResty_Lua 

Lua 从一开始就是作为一门方便嵌入(其它应用程序)并可扩展的轻量级脚本语言来设计的,因此她一直遵从着简单、小巧、可移植、快速的原则,官方实现完全采用 ANSI C 编写,能以 C 程序库的形式嵌入到宿主程序中。

作者:php-note.com  发布于:2019-03-31 12:31  分类:OpenResty_Lua 

HTTP响应报文分为三个部分:

  1. 响应行
  2. 响应头
  3. 响应体
作者:php-note.com  发布于:2019-03-30 22:52  分类:OpenResty_Lua 

在 Lua 中,函数是一种对语句和表达式进行抽象的主要机制。函数既可以完成某项特定的任务,也可以只做一些计算并返回结果。在第一种情况中,一句函数调用被视为一条语句;而在第二种情况中,则将其视为一句表达式

作者:php-note.com  发布于:2019-03-30 22:22  分类:OpenResty_Lua 

单个 if 分支 型

x = 10
if x > 0 then
    print("x is a positive number")
end