lua项目模块化编程(二)

一,模块化开发

       在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发;而且模块化是高性能Lua应用的关键。使用require第一次导入模块后,所有Nginx进程全局共享模块的数据和代码,每个Worker进程需要时会得到此模块的一个副本(Copy-On-Write),即模块可以认为是每Worker进程共享而不是每Nginx Server共享;另外注意之前我们使用init_by_lua中初始化的全局变量是每请求复制一个;如果想在多个Worker进程间共享数据可以使用 ngx.shared.DICT或如Redis之类的存储。

       在上一章节example项目中的lualib目录下,我们已经引入了很多第三方lua模块(类似于java中的jar包),如果需要用到某个模块的功能,只需要使用require命令导入该模块即可使用(类似于java中的import命令)。

#导入json处理模块
local cjson = require(“cjson”);
#导入redis客户端api模块
local redis = require(“resty.redis”);//在lua_package_path和lua_package_cpath声明的的位置查找这些引入的模块

 

二,自定义模块

#在/usr/local/nginx/webapps/example/lualib/目录下新建module目录,用户存放自定义模块
cd /usr/local/nginx/webapps/example/lualib/
mkdir module

#在module目录新建demo.lua模块文件
touch demo.lua
    在demo.lua中编辑自定义代码(类似于java中的demo.java文件):
local count = 0
local function getCount() 
       count = count + 1
       ngx.say("count : ", count) 
end  
local _M = {  
       getCount = getCount
}  
return _M  
   在开发时将所有数据做成局部变量/局部函数;通过 _M导出要暴露的函数,实现功能模块化封装。

 

三,测试自定义模块

 

#在/usr/local/nginx/webapps/example/lua/目录新建test-module-demo.lua文件
touch test-module-demo.lua

#编辑test-module-demo.lua文件(类似于java中的main方法)
local moduleDemo = require("module.demo");  
moduleDemo.getCount();

#修改example.conf配置文件,新增如下配置
location /example/test-module-demo {  
    default_type 'text/html';  
    lua_code_cache on;  
    content_by_lua_file webapps/example/lua/test-module-demo.lua;  
}

#重启nginx
/usr/local/nginx/sbin/nginx -s reload
   
   在浏览器地址栏输入http://120.25.233.113:802/example/test-module-demo 验证结果:

 
   

 

  

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值