不灭的焱

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

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

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

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

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

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由 Igor Sysoev 为俄罗斯著名的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

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

自从 OpenResty 1.5.8.1 版本之后,默认捆绑的 Lua 解释器就被替换成了 LuaJIT,而不再是标准 Lua。单从名字上,我们就可以直接看到这个新的解释器多了一个 JIT,接下来我们就一起来聊聊 JIT。

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

FFI 库,是 LuaJIT 中最重要的一个扩展库。它允许从纯 Lua 代码调用外部 C 函数,使用 C 数据结构。有了它,就不用再像 Lua 标准 math 库一样,编写 Lua 扩展库。把开发者从开发 Lua 扩展 C 库(语言/功能绑定库)的繁重工作中释放出来。学习完本小节对开发纯 ffi 的库是有帮助的,像 lru-resty-lrucache 中的 pureffi.lua,这个纯 ffi 库非常高效地完成了 lru 缓存策略。

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

对于比较底层的模块,内部使用到的非本地函数,都需要 local 本地化,这样做的好处:

  • 避免命名冲突:防止外部是 require(...) 的方法调用造成全局变量污染
  • 访问局部变量的速度比全局变量更快、更快、更快(重要事情说三遍)
作者:php-note.com  发布于:2019-03-31 09:19  分类:OpenResty_Lua  编辑

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

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

在函数定义之前使用函数相当于在变量赋值之前使用变量,Lua 世界对于没有赋值的变量,默认都是 nil,所以这里也就产生了一个 nil 的错误。

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

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

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

当一个方法返回多个值时,有些返回值有时候用不到,要是声明很多变量来一一接收,显然不太合适(不是不能)。Lua 提供了一个虚变量(dummy variable),以单个下划线(“_”)来命名,用它来丢弃不需要的数值,仅仅起到占位的作用。

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

在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 ngx.re.* 的规范,即使您对 Lua 语言中的规范非常熟悉,我们仍不建议使用 Lua 中的正则表达式。一是因为 Lua 中正则表达式的性能并不如 ngx.re.* 中的正则表达式优秀;二是 Lua 中的正则表达式并不符合 POSIX 规范,而 ngx.re.* 中实现的是标准的 POSIX 规范,后者明显更具备通用性。