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