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