深度解析LUA Web开发学习笔记

移动开发 iOS
LUA Web开发学习笔记是本文要介绍的内容,主要是来了解LUA中的Web开发,不多说,具体内容的实现来看本文详解。

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的说明请参见

  1. http://www.keplerproject.org/xavante/ 

这个文件的默认内容:

-- 文件开头关于版权信息略去

  1. require "xavante.filehandler"  
  2. require "xavante.cgiluahandler"  
  3. require "xavante.redirecthandler"  
  4. require "orbit.ophandler"  
  5.  
  6. -- Define here where Xavante HTTP documents scripts are located  
  7. local webDir = XAVANTE_WEB 
  8. local simplerules = {  
  9. { -- URI remapping example  
  10. match = "^/$",  
  11. with = xavante.redirecthandler,  
  12. params = {"index.lp"}  
  13. },   
  14. { -- cgiluahandler example  
  15. match = {"%.lp$", "%.lp/.*$", "%.lua$", "%.lua/.*$" },  
  16. with = xavante.cgiluahandler.makeHandler (webDir)  
  17. },  
  18. { -- ophandler example  
  19. match = {"%.op$", "%.op/.*$" },  
  20. with = orbit.ophandler.makeHandler (webDir)  
  21. },  
  22. { - wsapihandler example  
  23. match = {"%.ws$", "%.ws/" },  
  24. with = wsapi.xavante.makeGenericHandler (webDir)  
  25. },  
  26. { -- filehandler example  
  27. match = ".",  
  28. with = xavante.filehandler,  
  29. params = {baseDir = webDir}  
  30. },  
  31. }   
  32.  Displays a message in the console with the used ports  
  33. xavante.start_message(function (ports)  
  34. local date = os.date("[%Y-%m-%d %H:%M:%S]")  
  35. print(string.format("%s Xavante started on port(s) %s",  
  36. date, table.concat(ports, ", ")))  
  37. end)  
  38. xavante.HTTP{  
  39. server = {host = "*"port = 8080},  
  40. defaultHost = {  
  41. rules = simplerules 
  42. },  

文件共分3个部分:

  1. 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服务器上绑定域名,请添加一项:

  1. virtualHosts = {  
  2. ["www.rex.com"] = simplerules --www.rex.com 就是你自己网站的域名  
  3. }, 

注意:这里 virtualHosts 的 H 一定要大写,否则程序将报错!这一点,是Kepler官方网站资料上存在笔误,我调了半个多小时才尝试出来这一点,希望后来的朋友少走点弯路。还有就是,配置了 virtualHosts 节之后,原来的 defaultHost 节内容不能去掉,不然也会造成程序出错,加入了域名绑定后,我完整的 xavante.HTTP 配置如下:

  1. xavante.HTTP{  
  2. server = {host = "*"port = 80},  
  3. defaultHost = {  
  4. rules = simplerules 
  5. },  
  6. virtualHosts = {  
  7. ["www.rex.com"] = simplerules  
  8. },  

注意:如果这事你有其它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代码:

  1. using System.Collections;  
  2. using System.Configuration;  
  3. using System.Data;  
  4. using System.Linq;  
  5. using System.Web;  
  6. using System.Web.Security;  
  7. using System.Web.UI;  
  8. using System.Web.UI.HtmlControls;  
  9. using System.Web.UI.WebControls;  
  10. using System.Web.UI.WebControls.WebParts;  
  11. using System.Xml.Linq;  
  12. using System.Diagnostics;  
  13. public partial class _Default : System.Web.UI.Page  
  14. {  
  15. protected void Page_Load(object sender, EventArgs e)  
  16. {  
  17. if (!object.Equals(Request["lua"], null))  
  18. {  
  19. string luaFile = Request["lua"];  
  20. if (!string.IsNullOrEmpty(luaFile))  
  21. {  
  22. Response.Cache.SetNoStore();  
  23. Response.Cache.SetNoServerCaching();  
  24. string output = _Default.EnvokeLua(this, luaFile);  
  25. Response.Write(output);  
  26. Response.End();  
  27. }  
  28. }  
  29. }  
  30.  
  31. static string EnvokeLua(Page pg,string luaFile)  
  32. {  
  33. string rtval = string.Empty;  
  34. HttpServerUtility hsu = pg.Server;  
  35. string exeFile = hsu.MapPath("~/lib/lua.exe");  
  36. string luaPath = hsu.MapPath(string.Format("~/lua/{0}.lua", luaFile));  
  37. using (Process proc = new Process())  
  38. {  
  39. proc.StartInfo.FileName = exeFile;  
  40. proc.StartInfo.Arguments = string.Format(@" {0}", luaPath);  
  41. proc.StartInfo.RedirectStandardOutput = true;  
  42. proc.StartInfo.UseShellExecute = false;  
  43. proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;  
  44. proc.Start();  
  45. proc.WaitForExit();  
  46. rtval = proc.StandardOutput.ReadToEnd();  
  47. }  
  48. return rtval;  
  49. }  

这样很简单,通过一个ASPX页面作为代理,就可以解释执行LUA文件了:通过访问 http://localhost/default.aspx?lua=abc.lua ,你就可以解释执行位于该网站相对LUA目录下 abc.lua 文件,并获得输出,在通过HTTP Response的方式获得输出了。这种纯粹的Text输出方式,也比较适合使用AJAX和REST的Web程序中。

小结:深度解析LUA Web开发学习笔记的内容介绍完了,希望通过本文的学习能对你有所帮助!学习笔记的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-23 17:33:08

LuaMetatable

2011-08-24 15:22:09

2011-08-23 11:13:56

Lua

2011-08-23 13:15:37

LUAPackage

2011-09-07 17:19:16

Web widget

2011-08-29 18:09:45

LUAWeb开发服务器

2011-08-29 10:01:27

QTWebkit插件

2011-08-23 17:52:39

LUAWeb 开发

2019-03-06 09:55:54

Python 开发编程语言

2011-08-25 16:38:06

EditPluslua

2015-09-09 09:39:59

网络Web

2011-08-23 16:22:45

Lua 4.0函数

2016-08-23 14:37:21

2016-12-15 09:44:31

框架Caffe源码

2016-11-01 15:32:43

深度学习

2011-08-31 15:41:38

Lua解释器

2010-07-27 15:42:18

AdobeFlex

2011-08-25 17:29:40

LUAPHPWEB

2010-06-12 13:08:51

UML全称

2011-08-25 13:34:51

LUA私有性Privacy
点赞
收藏

51CTO技术栈公众号