openresty 前端开发入门一

OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建可以处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。html

OpenResty 经过汇聚各类设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可使用 Lua 脚本语言调动 Nginx 支持的各类 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发链接的高性能 Web 应用系统。前端

OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不只仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。mysql

以上是从官网拷过来的原话,咱们经过写一个hello world,来走进openresty开发之旅linux

下载地址
http://openresty.org/cn/downl...nginx

有的人不会下windows版,因此我这里直接给出下载地址,如今是最新版本,学会了以后,能够本身下载git

mac、linux 平台
https://openresty.org/downloa...github

windows平台
https://openresty.org/downloa...web

关于安装
mac、linux安装看这里 http://openresty.org/cn/insta...
windows 直接以后直接启动就能够了,不用安装ajax

安装完以后别着急启动redis

开始写代码了

打开nginx目录下的conf/nginx.conf文件

在server中新增如下代码

location /hello {
    default_type text/html;
    content_by_lua '
        ngx.say("<p>hello, world</p>")
    ';
}

相似这样

http {
    server {
        listen 80;
        server_name localhost;
        location / {
            default_type text/html;
            content_by_lua '
                ngx.say("<p>hello, world</p>")
            ';
        }
    }
}

如今启动nginx,而后访问 http://localhost/hello,不出意外的话应该就OK了,若是你以前启动了,那么须要reload一下,nginx的基本操做这里就不介绍了

经过ngx.say 咱们能够往客户端输出响应文本,在整个request周期内能够屡次调用,接受的参数是字符串,若是输出table会报错

还有一个输出的函数是ngx.print,一样也是输出响应内容

这里有一个,就是调用ngx.say会在输出咱们的内容以后会额外输出一个换行,可是ngx.print就不会,我以前一个同事用lua输出了一个200,而后前端用ajax调用,判断是否200,死活是false,看输出的内容就是200,差点怀疑人生,幸好我比较机智,直接查看ajax请求源码,发现行号多了一行,就是那个换行,若是不仔细根本看不出来,这个坑被我一个同事踩了

上面的代码直接把lua代码写到nginx配置里面了,维护起来不是很方便,并且写代码的时候也没有语法高亮,提示这些,比较蛋疼,咱们把它拿出来一个单独的文件,并放到一个nginx下面单独的lua目录下,方便管理

lua/hello.lua

ngx.say("<p>hello, world</p>")

nginx.conf 改为这样

location / {
     default_type text/html;
     content_by_lua_file lua/hello.lua;
 }

而后nginx reload 一下,再看效果,应该是同样的

咱们修改一下hello.lua,在hello,world后面加一个!号,刷新浏览器发现没有任何变化,这是由于lua代码被缓存了,这就致使咱们修改代码,就必须reload nginx 在能看到效果,若是是这样,那简直要疯了,其实要解决这个问题很简单,只要在nginx.conf里面把lua缓存给禁止掉就好了,固然在生产线上必定要把缓存打开,否则效果大打折扣

禁止lua缓存

server {
   listen 80;
   server_name localhost;
   lua_code_cache off; # 这个能够放在server下面,也能够凡在location下面,做用的范围也不同,为了简单直接放这里了
   location / {
       default_type text/html;
       content_by_lua_file lua/hello.lua;
   }
}

改完以后reload一下nginx,这里重点声明一下修改nginx配置必需要reload,不然是没有效果的

如今咱们再改hello.lua,而后刷新浏览器就会发现能够实时生效了

观察以上代码其实还会发现一个问题,若是咱们想要处理不少个请求,那不是要在nginx里面配置N个location吗,咱们确定不会这么作,这里能够经过nginx正在匹配动态指定lua文件名,便可完成咱们的需求,后台我再介绍如何打造一个属于咱们的mvc轻量级框架,这里咱们先这么作

location 改为这样

location ~ /lua/(.+) {
     content_by_lua_file lua/$1.lua;
}

reload nginx

这个时候访问hello world的请求url就变成了
http://localhost/lua/hello
同理,咱们在lua文件里面建立一个welcome.lua的话,就能够经过
http://localhost/lua/welcome 来访问了
以此类推,咱们就能够经过新增多个文件来处理不一样的请求了,并且修改了还能实时生效,剩下的就是完成业务代码了,好比调一下redis返回数据,或者mysql之类的,有悟性的同窗在这里已经能够作不少事情了

示例代码 参见demo1部分

相关文章
相关标签/搜索