LUA Web開發學習筆記是本文要介紹的內容,主要是來瞭解LUA中的Web開發,不多說,具體內容的實現來看本文詳解。
Kepler環境搭建
我本身是做Web開發的,自然喜歡把新學習的東西往Web方面聯絡。提到Web和Lua,所有人都會自然而然的想起一個開源的項目Kepler http://www.keplerproject.org/)。它給我最大的感覺就是短小精悍,實在有點難以置信,包括Socket, IO, TCP/IP, HTTP, WebCGI等眾多功能模組的軟體包在內的下載和安裝包,居然只有900K左右!安裝的過程也很簡單,我寫一下我在Windows2003/XP下安裝Kepler的過程:
1、下載並安裝LuaRocks http://www.luarocks.org/),預設的最新版本安裝目錄在 C:LuaRocks.5.2,安裝之後,推薦將這個目錄加入Windows系統Path環境參數中。
2、在CMD命令視窗中鍵入 luarocks install kepler-xavante 沒加Path參數的,需要打出 luarocks 全路徑),注意,此時你的電腦一定要可以正常連結網路,以便可以在網上下載Kepler, Xavante程式功能包,會有約3~5分鐘的下載安裝過程。
3、Kepler安裝完成後,C:LuaRocks 目錄下會建立2個子目錄 bin 和 rocks,bin下面是Kepler核心的可執行檔,rocks 下面是它使用到的Lua軟體功能包和配置資訊。安裝完成之後,建議將 C:LuaRocks.in 目錄也加入Windows系統Path環境參數中。
4、運行 setup-kepler 沒加Path參數的,需要打出 C:LuaRocks.insetup-kepler )批處理命令進行預設Web網站的配置。我採用Kepler安裝後預設的配置,如果希望改變更配置置,可以修改 C:LuaRocks
ockskepler1.1-1.in 目錄下 setup-kepler 檔案內容。
5、Web網站初始化完畢,會發現 C:LuaRocks 目錄下,又多出一個 kepler 子目錄此目錄名和以上安裝Web網站的配置有關),這就是以後我們經常關注的網站內容了,開啟 C:LuaRockskeplerhtdocs est.lp 檔案看看,是不是感覺中間的內容就是Lua文法的ASP/JSP? :)
6、Web網站的內容都具備了,就差啟動Web伺服器處理序了。運行 xavante_start 沒加Path參數的,需要打出 C:LuaRocks.inxavante_start )批處理命令就可以,關於Web網站的參數配置,下文會詳細介紹。
安裝的工作已經完成了,如果採用的是Kepler的預設配置,那麼用你的瀏覽器開啟 http://localhost:8080/ 是不是看到Kepler的歡迎頁面了?
喜歡正版攻略的朋友,安裝的過程也可以參照 http://www.keplerproject.org/en/Installation ,不過我感覺它寫的不夠詳細,尤其是最後一步,存在錯誤:直接運行 xavante.exe 檔會造成引用庫找不到的錯誤,不能成功啟動Web服務程式的,這是由於環境路徑沒有配置好的原因,稍微細心點的朋友,開啟 C:LuaRocks.inxavante_start.bat 檔案,一看便知。
Xavante參數配置
在Kepler軟體包中,真正起Web伺服器作用的模組叫做Xavante。它的設定檔是一個Lua檔案,它位於 C:LuaRockskepleretcxavanteconfig.lua ,在使用 setup-kepler 命令安裝網站之前,可以修改Kepler預設的設定檔 C:LuaRocks
ockskepler1.1-1confxavanteconfig.lua 讓你的修改生效於以後所有建立的新網站。下面我們看看這個設定檔的配置內容。Kepler官方手冊關於Xavante的說明請參見
- http://www.keplerproject.org/xavante/
這個檔案的預設內容:
-- 檔案開頭關於著作權資訊略去
- require "xavante.filehandler"
- require "xavante.cgiluahandler"
- require "xavante.redirecthandler"
- require "orbit.ophandler"
-
- -- Define here where Xavante HTTP documents scripts are located
- local webDir = XAVANTE_WEB
- local simplerules = {
- { -- URI remapping example
- match = "^/$",
- with = xavante.redirecthandler,
- params = {"index.lp"}
- },
- { -- cgiluahandler example
- match = {"%.lp$", "%.lp/.*$", "%.lua$", "%.lua/.*$" },
- with = xavante.cgiluahandler.makeHandler (webDir)
- },
- { -- ophandler example
- match = {"%.op$", "%.op/.*$" },
- with = orbit.ophandler.makeHandler (webDir)
- },
- { - wsapihandler example
- match = {"%.ws$", "%.ws/" },
- with = wsapi.xavante.makeGenericHandler (webDir)
- },
- { -- filehandler example
- match = ".",
- with = xavante.filehandler,
- params = {baseDir = webDir}
- },
- }
- Displays a message in the console with the used ports
- xavante.start_message(function (ports)
- local date = os.date("[%Y-%m-%d %H:%M:%S]")
- print(string.format("%s Xavante started on port(s) %s",
- date, table.concat(ports, ", ")))
- end)
- xavante.HTTP{
- server = {host = "*", port = 8080},
- defaultHost = {
- rules = simplerules
- },
- }
檔案共分3個部分:
- simplerules, xavante.start_message, xavante.HTTP:
simplerules :類似於ASP.Net在IIS裡面的URL Rewrite功能的URL重發功能,說白了就是依次檢索,找到匹配的Request URL正則項,轉寄給這個匹配項中所定義的Web網站中某個指令檔進行運算,最後返回HTTP Response的內容。
xavante.start_message :用於記錄每次Xavante進程啟動後,程式發生的Log記錄格式的配置。
xavante.HTTP: 用於Web伺服器主要參數配置。修改port = 8080, 可以修改HTTP服務的預設連接埠。如果想在你的Xavante伺服器上綁定網域名稱,請添加一項:
- virtualHosts = {
- ["www.rex.com"] = simplerules --www.rex.com 就是你自己網站的網域名稱
- },
注意:這裡 virtualHosts 的 H 一定要大寫,否則程式將報錯!這一點,是Kepler官方網站資料上存在筆誤,我調了半個多小時才嘗試出來這一點,希望後來的朋友少走點彎路。還有就是,配置了 virtualHosts 節之後,原來的 defaultHost 節內容不能去掉,不然也會造成程式出錯,加入了網域名稱綁定後,我完整的 xavante.HTTP 配置如下:
- xavante.HTTP{
- server = {host = "*", port = 80},
- defaultHost = {
- rules = simplerules
- },
- virtualHosts = {
- ["www.rex.com"] = simplerules
- },
- }
注意:如果這事你有其它Web服務程式如Appach ISS等)同時使用80連接埠,也將造成Xavante啟動出錯。因此,請在啟動Xavante之前,暫停其它Web服務程式。這一點,我一直很費解:為什麼Xavante的配置非要將Port的配置強制加到每個網站上去呢?我是新手,請熟悉的朋友指教一二,非常感謝!
我嘗試使用Kepler和Xavante只有2天左右,先寫這麼多,希望有機會和對此感興趣的朋友討論學習!
將LUA嵌入ASP.Net頁面
考慮到Xavante的穩定性問題,我決定嘗試一下使用IIS作為Web伺服器,並且在ASP.Net裡面使用Progress對象調用LUA的VM來調用LUA代碼。建立一個ASPX頁面,寫入以下Code behind代碼:
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.Diagnostics;
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!object.Equals(Request["lua"], null))
- {
- string luaFile = Request["lua"];
- if (!string.IsNullOrEmpty(luaFile))
- {
- Response.Cache.SetNoStore();
- Response.Cache.SetNoServerCaching();
- string output = _Default.EnvokeLua(this, luaFile);
- Response.Write(output);
- Response.End();
- }
- }
- }
-
- static string EnvokeLua(Page pg,string luaFile)
- {
- string rtval = string.Empty;
- HttpServerUtility hsu = pg.Server;
- string exeFile = hsu.MapPath("~/lib/lua.exe");
- string luaPath = hsu.MapPath(string.Format("~/lua/{0}.lua", luaFile));
- using (Process proc = new Process())
- {
- proc.StartInfo.FileName = exeFile;
- proc.StartInfo.Arguments = string.Format(@" {0}", luaPath);
- proc.StartInfo.RedirectStandardOutput = true;
- proc.StartInfo.UseShellExecute = false;
- proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
- proc.Start();
- proc.WaitForExit();
- rtval = proc.StandardOutput.ReadToEnd();
- }
- return rtval;
- }
- }
這樣很簡單,通過一個ASPX頁面作為代理,就可以解釋執行LUA檔案了:通過訪問 http://localhost/default.aspx?lua=abc.lua ,你就可以解釋執行位於該網站相對LUA目錄下 abc.lua 檔案,並獲得輸出,在通過HTTP Response的方式獲得輸出了。這種純粹的Text輸出方式,也比較適合使用AJAX和REST的Web程式中。
小結:深度解析LUA Web開發學習筆記的內容介紹完了,希望通過本文的學習能對你有所協助!學習筆記的內容介紹完了,希望通過本文的學習能對你有所協助!