博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openresty 前端开发入门一
阅读量:6951 次
发布时间:2019-06-27

本文共 2507 字,大约阅读时间需要 8 分钟。

hot3.png

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

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

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

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

下载地址

有的人不会下windows版,所以我这里直接给出下载地址,现在是最新版本,学会了之后,可以自己下载

mac、linux 平台

windows平台

关于安装 mac、linux安装看这里 windows 直接之后直接启动就可以了,不用安装

安装完之后别着急启动

开始写代码了

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

在server中新增以下代码

location /hello {    default_type text/html;    content_by_lua '        ngx.say("

hello, world

") ';}

类似这样

http {    server {        listen 80;	    server_name localhost;        location / {            default_type text/html;            content_by_lua '                ngx.say("

hello, world

") '; } }}

现在启动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("

hello, world

")

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就变成了 了 同理,我们在lua文件里面创建一个welcome.lua的话,就可以通过 来访问了 以此类推,我们就可以通过新增多个文件来处理不同的请求了,而且修改了还能实时生效,剩下的就是完成业务代码了,比如调一下redis返回数据,或者mysql之类的,有悟性的同学在这里已经可以做很多事情了

转载于:https://my.oschina.net/362228416/blog/815825

你可能感兴趣的文章
pickle和json模块
查看>>
Python基本语法_输入/输出语句详解
查看>>
用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
查看>>
快速入门分布式消息队列之 RabbitMQ(2)
查看>>
IIS安装与部署,站点的部署与配置
查看>>
Google两步验证的工作原理
查看>>
es6 babel编译
查看>>
过滤器(转载)
查看>>
PLSQL基本操作
查看>>
persisted? vs new_record?
查看>>
Linux下禁止ping最简单的方法
查看>>
一个用户下表、批量授予权限给另一个用户
查看>>
Hibernate 关联映射
查看>>
mybatis spring maven
查看>>
Introduction of Open CASCADE Foundation Classes
查看>>
C#程序之二 -- 数独小游戏(1. UI设计)
查看>>
Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
查看>>
机房电脑维护记
查看>>
poj1251
查看>>
css单行文本和多行文本溢出实现省略号显示
查看>>