更新時(shí)間:2020-03-15 來(lái)源:黑馬程序員 瀏覽量:
1、OpenResty簡(jiǎn)介
1.1 了解OpenResty
OpenResty是一個(gè)基于 Nginx 與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫(kù)、第三方模塊以及大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。
簡(jiǎn)單地說(shuō)OpenResty 的目標(biāo)是讓你的Web服務(wù)直接跑在 Nginx 服務(wù)內(nèi)部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對(duì) HTTP 客戶端請(qǐng)求,甚至于對(duì)遠(yuǎn)程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進(jìn)行一致的高性能響應(yīng)。推薦了解傳智播客java培訓(xùn)課程。
1.2 OpenResty安裝
·下載對(duì)應(yīng)你系統(tǒng)的OpenResty版本:http://openresty.org/cn/download.html
支持 mac linux windows
(我們現(xiàn)在使用的windows平臺(tái)版本是1.13.6.2)
·選擇安裝目錄(建議非中文)進(jìn)行解壓
雙擊nginx.exe運(yùn)行即可
測(cè)試:打開(kāi)瀏覽器訪問(wèn) localhost
2、快速入門
2.1 動(dòng)態(tài)輸出
我們現(xiàn)在做個(gè)最簡(jiǎn)單的小例子,使用Lua腳本動(dòng)態(tài)輸出內(nèi)容,打開(kāi)openresty-1.13.6.2-win64目錄下的conf/nginx.conf文件
在server中新增以下代碼
類似這樣
現(xiàn)在啟動(dòng)nginx,然后訪問(wèn) http://localhost/hello,如果你之前啟動(dòng)了,那么需要nginx -s reload
通過(guò)ngx.say 我們可以往客戶端輸出響應(yīng)文本,是不是跟咱們tomcat response.write很像嘻嘻,后期我們會(huì)使用它輸出json。
還有一個(gè)輸出的函數(shù)是ngx.print,同樣也是輸出響應(yīng)內(nèi)容。
2.2 優(yōu)化動(dòng)態(tài)輸出
上面的代碼直接把lua代碼寫到nginx配置里面了,維護(hù)起來(lái)不是很方便,我們把它拿出來(lái)一個(gè)單獨(dú)的文件,并放到openresty-1.13.6.2-win64目錄下面單獨(dú)的lua目錄下,方便管理
新建lua/hello.lua 文件,并編寫代碼
ngx.say("<p>hello, world</p>")
nginx.conf 改成這樣
然后nginx -s reload 一下,頁(yè)面效果是一樣的
觀察以上代碼其實(shí)還會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,如果我們想要處理很多個(gè)請(qǐng)求,那不是要在nginx里面配置N個(gè)location嗎,我們肯定不會(huì)這么做,這里可以通過(guò)nginx動(dòng)態(tài)匹配指定lua文件名。
nginx.conf 改成這樣
新建lua/itheima.lua 文件,并編寫代碼
ngx.print("<p>hello,itheima</p>")
然后nginx -s reload 一下
這個(gè)時(shí)候訪問(wèn)hello world的請(qǐng)求url就變成了 http://localhost/lua/hello 了
同理,我們?cè)趌ua文件里面創(chuàng)建一個(gè)itheima.lua,就可以通過(guò) http://localhost/lua/itheima 來(lái)訪問(wèn)了
2.3 接收參數(shù)
我們知道http請(qǐng)求通常分為兩種,分別是GET,POST,在http協(xié)議中,GET參數(shù)通常會(huì)緊跟在uri后面,而POST請(qǐng)求參數(shù)則包含在請(qǐng)求體中。
使用OpenResty獲取請(qǐng)求參數(shù)的方法也有二種,為了統(tǒng)一獲取請(qǐng)求參數(shù)的方式,隱藏具體細(xì)節(jié),提供一個(gè)更友好的api接口,我們可以簡(jiǎn)單的封裝一下
創(chuàng)建lua/req.lua 文件
這個(gè)模塊就實(shí)現(xiàn)了參數(shù)的獲取,而且支持GET,POST兩種傳參方式
接下來(lái)我們可以寫一個(gè)簡(jiǎn)單的lua,來(lái)引入這個(gè)模塊,然后測(cè)試一下效果
conf/nginx.conf 需要添加
http {
lua_package_path C:\Users\Ys\Desktop\openresty\openresty-1.13.6.2-win64\lua\?.lua;
# 這里一定要指定package_path,否則會(huì)找不到引入的模塊,然后會(huì)500
server {
listen 80;
server_name localhost;
lua_code_cache off;
location ~ /lua/(.+) {
default_type text/html;
content_by_lua_file lua/$1.lua;
}
}
}
創(chuàng)建lua/test.lua 文件
-- 引入req模塊
local req = require "req"
-- 獲取請(qǐng)求參數(shù)列表
local args = req.getArgs()
-- 獲取key為name的值
local name = args['name']
-- 如果不存在指定默認(rèn)值
if name == nil or name == "" then
name = "xiaozhi"
end
-- 輸出結(jié)果
ngx.say("<p>hello " .. name .. "!</p>")
然后nginx -s reload 一下
訪問(wèn) http://localhost/lua/test?name=jack
響應(yīng)客戶端默認(rèn)的參數(shù)
3、總結(jié)
本次主要講解了OpenResty在window環(huán)境下的安裝及使用。通過(guò)本篇文章希望大家可以簡(jiǎn)單掌握OpenResty接收頁(yè)面請(qǐng)求參數(shù)及動(dòng)態(tài)輸出內(nèi)容,后續(xù)將給大家?guī)?lái)獲取從redis獲取數(shù)據(jù)并以json格式響應(yīng)給客戶端。
猜你喜歡
百度LBS使用教程詳解[java培訓(xùn)]
2020-03-15Jvm內(nèi)存模型深入介紹[java培訓(xùn)]
2020-03-15Java中強(qiáng)引用、軟引用、弱引用和虛引用分別是什么?[java培訓(xùn)]
2020-03-15java高并發(fā):如何解決秒殺的高并發(fā)?[java培訓(xùn)]
2020-03-152020年【抗疫之作】JavaSE基礎(chǔ)加強(qiáng)階段課程發(fā)布啦!
2020-03-11對(duì)程序員來(lái)說(shuō) 很好用的8款開(kāi)發(fā)工具 漲薪就靠它們!
2020-03-11