posts - 9,  comments - 19,  trackbacks - 0

背景

前段时间项目需要一个点击服务,大致是要根据用户请求的url及数据库中的规则,匹配出一个结果并记录日志。最开始是一个很小的需求,结果业务越来越复杂,业务逻辑中经常要处理header头和一些其他的信息,导致代码越来越混乱。在一期结束之后,抽时间把这段时间的工作抽象出了一个轻量级框架,只做了适量的封装,加入了代码生成的模块,可以帮助开发者迅速做出一个可用的web服务。

介绍

dodolu框架地址(Github)。

该框架只做了最小化的封装,几乎没有性能损失,并提供了根据配置文件(meta.lua),自动生成route模块,nginx.conf配置,logger模块的功能,减轻了开发工作量,避免重复手写大量易错的配置或字符串变量,有助于多人开发统一风格。

详情Github的README

功能

包括三个部分,一个是web框架,一个是代码自动生成模块,一个是魔改出的lua远程调试器

web框架部分

只有1k行以下的代码,集成了resty.template、resty.cookie、UUID生成等第三方模块。提供request、response、context、util等库方便开发人员使用。

代码自动生成部分

可自动生成:

  1. 路由配置
  2. 日志记录模块
  3. nginx.conf

主要目的在于解决nginx配置与lua代码的分离问题(在日志记录中尤为严重)。

开发人员新建应用步骤:在App文件夹下,新建lua文件,然后填入do_get()方法即可处理相应的get请求,所有配置在meta/meta.lua里面。

一个记录日志并返回1x1gif的例子:

-- 这个文件下面存放你的业务逻辑
-- 这个文件下面存放你的业务逻辑
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 日志模块是根据meta.lua自动生成的     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远程调试器

文档详细见这里,这里只演示下用法:
sh debug.sh,然后运行用户程序,成功后

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


设置断点   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,
}
继续执行,直到断点  r
> r Paused at file a.lua line 11


posted on 2014-12-22 18:22 右席 阅读(2994) 评论(1)  编辑 收藏 引用 所属分类: Luajit

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理