背景
前段時(shí)間項(xiàng)目需要一個(gè)點(diǎn)擊服務(wù),大致是要根據(jù)用戶請(qǐng)求的url及數(shù)據(jù)庫中的規(guī)則,匹配出一個(gè)結(jié)果并記錄日志。最開始是一個(gè)很小的需求,結(jié)果業(yè)務(wù)越來越復(fù)雜,業(yè)務(wù)邏輯中經(jīng)常要處理header頭和一些其他的信息,導(dǎo)致代碼越來越混亂。在一期結(jié)束之后,抽時(shí)間把這段時(shí)間的工作抽象出了一個(gè)輕量級(jí)框架,只做了適量的封裝,加入了代碼生成的模塊,可以幫助開發(fā)者迅速做出一個(gè)可用的web服務(wù)。
介紹
dodolu框架地址(Github)。
該框架只做了最小化的封裝,幾乎沒有性能損失,并提供了根據(jù)配置文件(meta.lua),自動(dòng)生成route模塊,nginx.conf配置,logger模塊的功能,減輕了開發(fā)工作量,避免重復(fù)手寫大量易錯(cuò)的配置或字符串變量,有助于多人開發(fā)統(tǒng)一風(fēng)格。
詳情Github的README
功能
包括三個(gè)部分,一個(gè)是web框架,一個(gè)是代碼自動(dòng)生成模塊,一個(gè)是魔改出的lua遠(yuǎn)程調(diào)試器。
web框架部分
只有1k行以下的代碼,集成了resty.template、resty.cookie、UUID生成等第三方模塊。提供request、response、context、util等庫方便開發(fā)人員使用。
代碼自動(dòng)生成部分
可自動(dòng)生成:
- 路由配置
- 日志記錄模塊
- nginx.conf
主要目的在于解決nginx配置與lua代碼的分離問題(在日志記錄中尤為嚴(yán)重)。
開發(fā)人員新建應(yīng)用步驟:在App文件夾下,新建lua文件,然后填入do_get()
方法即可處理相應(yīng)的get請(qǐng)求,所有配置在meta/meta.lua
里面。
一個(gè)記錄日志并返回1x1gif的例子:
-- 這個(gè)文件下面存放你的業(yè)務(wù)邏輯
-- 這個(gè)文件下面存放你的業(yè)務(wù)邏輯
local app = {}
function app.do_get(ctx)
local response = ctx.response
local request = ctx.request
local cookie = ctx.cookie
response:set_content_type("text/html")
local url = request.uri
--
do some process
------------- write log ---------------
-- my_log 日志模塊是根據(jù)meta.lua自動(dòng)生成的
local logger = ctx.get_logger('my_log')
local log_data = { a = "xxx"}
logger.write(log_data, other_params

)
-------------
return empty gif -------
response:empty_gif()
response:close()
end
function app.do_post(ctx) end
function app.do_put(ctx) end
function app.do_delete(ctx) end
return app
lua遠(yuǎn)程調(diào)試器
文檔詳細(xì)見這里,這里只演示下用法:
sh debug.sh
,然后運(yùn)行用戶程序,成功后
Lua Remote Debugger
Run the program you wish to debug
Paused at file a.lua
Type 'help' for commands
>
下一步 n
n
Paused at file a.lua line 8
8: print("Start")
>
查看源碼 l
> l
source file: a.lua
2:
3: local tab = {
4: foo = 1,
5: bar = 2
6: }
7:
8:>> print("Start")
9:
10: local bb = require "b"
11: bb.foo()
12:
13: for i = 1, 10 do
14: print("Loop")
設(shè)置斷點(diǎn) b <file>:<line>
查看 listb
> b a.lua:11
> listb
a.lua: 11
查看局部變量 local
> local
{
["tab"] = {
{
["bar"] = 2,
["foo"] = 1,
},
"table: 0x2589ee0",
},
}
查看變量 p tab
> p tab
{
["bar"] = 2,
["foo"] = 1,
}
繼續(xù)執(zhí)行,直到斷點(diǎn) r
> r
Paused at file a.lua line 11
posted on 2014-12-22 18:22
右席 閱讀(3344)
評(píng)論(1) 編輯 收藏 引用 所屬分類:
Luajit