Linux下cgilua的运行,xavante运行cgilua流程

安装软件

需要安装三个lua 库:  xavante wsapi cgilua

luarocks install xavante

Xavante is a Lua HTTP 1.1 Web server that uses a modular architecture based on URI mapped handlers. Xavante currently offers a file handler, a redirect handler and a WSAPI handler. Those are used for general files, URI remapping and WSAPI applications respectively.

luarocks install wsapi-xavante

WSAPI is an API that abstracts the web server from Lua web applications. By coding against WSAPI your application can run on any of the supported servers and interfaces (currently CGI, FastCGI and Xavante, on Windows and UNIX-based systems).

cgilualuarocks install cgilua

CGILua is a tool for creating dynamic Web pages and manipulating input data from Web forms. CGILua allows the separation of logic and data handling from the generation of pages, making it easy to develop web applications with Lua.

运行脚本

切换到cgilua样例目录

[email protected]:/home/share/cgilua-master/cgilua-master/examples# lua xavante_cgilua.lua

[2016-06-22 22:16:50] Xavante started on port(s) 8080

脚本内容:

xavante = require "xavante"

xavante.filehandler = require "xavante.filehandler"

xavante.cgiluahandler = require "xavante.cgiluahandler"

xavante.redirecthandler = require "xavante.redirecthandler"

-- Define here where Xavante HTTP documents scripts are located

local webDir = "."

local simplerules = {

{ -- URI remapping example

match = "^[^%./]*/$",

with = xavante.redirecthandler,

params = {"index.lp"}

},

{ -- cgiluahandler example

match = {"%.lp$", "%.lp/.*$", "%.lua$", "%.lua/.*$" },

with = xavante.cgiluahandler.makeHandler (webDir)

},

{ -- filehandler example

match = ".",

with = xavante.filehandler,

params = {baseDir = webDir}

},

}

xavante.HTTP{

server = {host = "*", port = 8080},

defaultHost = {

rules = simplerules

},

}

-- 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.start()

运行流程分析

1、 xavante 负责服务器的启动, 并制定 cgilua 请求处理的handler注册

{ -- cgiluahandler example

match = {"%.lp$", "%.lp/.*$", "%.lua$", "%.lua/.*$" },

with = xavante.cgiluahandler.makeHandler (webDir)

},

2、xavante.cgiluahandler.makeHandler (webDir) , handler的构造

-------------------------------------------------------------------------------

-- Returns the CGILua handler

-------------------------------------------------------------------------------

function _M.makeHandler (diskpath, params)

params = setmetatable(params or {}, { __index = { modname = "wsapi.sapi",

bootstrap = bootstrap } })

local sapi_loader = common.make_isolated_launcher(params)

return xavante.makeHandler(sapi_loader, nil, diskpath)

end

其中,handler构造依赖了 xavante的wsapi, with的值可以是 function(req, res)

local xavante = require "wsapi.xavante"  --- 专门针对  xavante写的wsapi的适配

-- Makes a WSAPI handler for a single WSAPI application

function _M.makeHandler (app_func, app_prefix, docroot, app_path, extra_vars)

return function (req, res)

return wsapihandler(req, res, app_func, app_prefix, docroot, app_path, extra_vars)

end

end

wsapi.xavante中存在 构造 cgivars 表。

make_handler 入参 wsapi_loader需要 wsapi.sapi文件支持

params = setmetatable(params or {}, { __index = { modname = "wsapi.sapi",

bootstrap = bootstrap } })

local sapi_loader = common.make_isolated_launcher(params)

此loader即加载 wsapi.sapi文件, 文件被rings包裹运行, 即 wsapi.sapi –> cgilua 都是在独立环境下运行

前面 “wsapi.xavante中存在 构造 cgivars 表” 也会传入 独立的运行环境。

wsapi.sapi 直接 调用 cgilua

local cgilua = require "cgilua"

cgilua.main()

return res:finish()

end

原文:http://www.cnblogs.com/lightsong/p/5608957.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值