Lua中使用Web开发

Lua 中使用Web 开发目录Kepler 环境搭建 . .......................................................................

Lua 中使用Web 开发

目录

Kepler 环境搭建 . ................................................................................................. 2

Xavante 参数配置 ............................................................................................... 3

将LUA 嵌入ASP.Net 页面 .................................................................................... 5

标签:lua,web 服务器,web 开发,web 服务

1

,

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:LuaRocksin 目录也加入Windows 系统Path 环境参数中。

4、运行 setup-kepler (没加Path 参数的,需要打出 C:LuaRocksinsetup-kepler )批处理命令进行默认Web 站点的配置。我采用Kepler 安装后默认的配置,如果希望改变配置,可以修改 C:LuaRocks

ockskepler1.1-1in 目录下 setup-kepler 文件内容。

5、Web 站点初始化完毕,会发现 C:LuaRocks 目录下,又多出一个 kepler 子目录(此目录名和以上安装Web 站点的配置有关),这就是以后我们经常关注的站点内容了,打开 C:LuaRockskeplerhtdocs est.lp 文件看看,是不是感觉中间的内容就是Lua 语法的ASP/JSP? :)

6、Web 网站的内容都具备了,就差启动Web 服务器进程了。运行 xavante_start (没加Path 参数的,需要打出 C:LuaRocksinxavante_start )批处理命令就可以,关于Web 网站的参数配置,下文会详细介绍。

安装的工作已经完成了,如果采用的是Kepler 的默认配置,那么用你的浏览器打开 http://localhost:8080/ 是不是看到Kepler 的欢迎页面了?

2

,

喜欢正版攻略的朋友,安装的过程也可以参照

Xavante 参数配置

在Kepler 软件包中,真正起Web 服务器作用的模块叫做Xavante 。它的配置文件是一个Lua 文件,它位于 C:LuaRockskepleretcxavanteconfig.lua ,在使用 setup-kepler 命令安装站点之前,可以修改Kepler 默认的配置文件 C:LuaRocks

ockskepler1.1-1confxavanteconfig.lua 让你的修改生效于以后所有创建的新网站。下面我们看看这个配置文件的配置内容。

这个文件的默认内容:

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

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}

},

3

,

}

-- 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

},

}

4

,

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

{

,

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 程序中

6

标签: