CN107479878B - 一种基于openresty的lua模块化开发方法及开发框架 - Google Patents

一种基于openresty的lua模块化开发方法及开发框架 Download PDF

Info

Publication number
CN107479878B
CN107479878B CN201710615855.9A CN201710615855A CN107479878B CN 107479878 B CN107479878 B CN 107479878B CN 201710615855 A CN201710615855 A CN 201710615855A CN 107479878 B CN107479878 B CN 107479878B
Authority
CN
China
Prior art keywords
lua
module
openness
configuration
modular
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201710615855.9A
Other languages
English (en)
Other versions
CN107479878A (zh
Inventor
李亮
董宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Supply And Marketing Technology Co ltd
Original Assignee
Beijing Supply And Marketing Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Supply And Marketing Technology Co ltd filed Critical Beijing Supply And Marketing Technology Co ltd
Priority to CN201710615855.9A priority Critical patent/CN107479878B/zh
Publication of CN107479878A publication Critical patent/CN107479878A/zh
Application granted granted Critical
Publication of CN107479878B publication Critical patent/CN107479878B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于openresty的lua模块化开发方法及开发框架。首先,openresty执行到某一阶段时,获取模块化配置单元(3)中第一个lua模块对应的lua模块名称(31)、模块开关(32)以及对应的配置文件路径(33);之后,获取其在当前阶段注册的回调函数;根据所述lua模块所对应的配置文件路径(33)来获取相应模块的配置文件(11);最后根据所述模块开关(32)的开关指令判断当前模块是否开启,若是,则采用当前lua模块的模块配置文件(11)作为参数调用所述回调函数所对应的函数代码(41),若否,则重新遍历,直至执行完所述模块化配置单元(3)所有lua模块。

Description

一种基于openresty的lua模块化开发方法及开发框架
技术领域
本发明属于大数据处理技术领域,具体涉及一种基于openresty的lua模块化开发方法及开发框架。
背景技术
Openresty在二次开发过程中需要面临非常多的业务需求与场景,需要添加大量的lua实现,当下openresty支持lua脚本的方式主要是:在特定的几个执行阶段开放api入口,可以内嵌lua代码或者引用lua脚本。
采用上述方式存在一些弊端,例如:
1、一个阶段只允许挂载一个lua脚本或者嵌入一段lua代码,一个阶段想执行多个逻辑只能将代码写到同一个脚本文件中,会导致代码混杂,耦合度高,代码维护成本高,特别是多人协同开发时会有很大弊端,导致代码不安全,诸如同一个时间多人一起添加不同的逻辑到同一个文件中需要保证相互之间代码不受同名变量等的影响;
2、lua实现中的一些灵活配置往往只能写在代码中,每次修改就得操作代码,风险性高,出错的概率很大,运维在进行配置修改时还需掌握lua语言,具备修改简单代码的能力,提升了运维成本和难度
3、对于需要挂载多个阶段执行的逻辑,在配置的时候有一个阶段没有挂载就会导致不可用,如此当有多个逻辑跨越多个阶段并且需要同时生效时,但凡有一点错误就会导致整体失效,出现不可预知的问题。
综上:当前对于大规模的lua脚本开发以及跨越多个阶段的执行会有很多局限性,多功能之间耦合性高,开发维护难度极大,多阶段执行的功能配置起来麻烦,还容易漏掉多用户场景,配置灵活性受阻,且随着代码量的增多会有很多耦合性和维护性的问题。
发明内容
为了解决背景技术中存在的至少一个技术问题,本发明提出了一种基于openresty的lua模块化开发方法及开发框架,用以实现高效的lua模块开发,简便lua模块配置、可以规范lua模块开发过程、提升开发效率。
本发明基于openresty的lua模块化开发方法,主要包括以下步骤:
步骤一、openresty执行到某一阶段时,获取模块化配置单元中第一个lua模块对应的lua模块名称、模块开关以及对应的配置文件路径;
步骤二、根据所述lua模块名称,在模块化处理流程单元的模块注册文件中获取其在当前阶段注册的回调函数;
步骤三、根据所述lua模块所对应的配置文件路径来获取相应模块的配置文件;
步骤四、根据所述模块开关的开关配置判断当前模块是否开启,若是,则采用当前lua模块的模块配置文件作为参数调用所述回调函数所对应的函数代码,若否,则返回步骤一,检查模块化配置单元中下一个lua模块的配置,直至执行完所述模块化配置单元所有lua模块。
优选的是,所述步骤一中,根据系统配置单元中配置的文件路径获取模块化配置单元中所记录的lua模块名称、模块开关以及对应的配置文件路径。
优选的是,所述步骤一中,系统配置单元中配置的文件路径由执行指令脚本读取后执行。
优选的是,所述步骤一中,openresty执行到某一阶段时,首先调用当前系统中的阶段执行指令,再由所述阶段执行指令执行所述阶段执行指令脚本。
优选的是,所述步骤二中,所述阶段执行指令存储于系统子配置单元中。
优选的是,所述步骤三中,所述配置文件存储于模块配置单元中。
与上述方法相对应,本发明还提供了一种基于openresty的lua模块化开发框架,主要包括单元:
模块配置单元,存储有配置文件,用于提供函数代码实现的参数;
系统子配置单元,存储有阶段执行指令;
模块化配置单元,包括用于记录lua模块名称、模块开关以及对应的配置文件路径;
模块代码实现单元,用于存放lua模块的回调函数的函数代码;
模块化处理流程单元,包含阶段执行指令脚本,用于按配置依次执行各个模块的回调函数,以及包含模块注册文件,用于获取lua模块在执行阶段中注册的回调函数;
系统配置单元,用于存储lua模块的路径。
通过本发明,在openresty执行过程中,能够挂载多个lua脚本或者嵌入多段lua代码,多阶段执行的功能配置灵活性,不会出现随着代码量的增多而存在耦合性差、维护性差的情况。
附图说明
图1为本发明基于openresty的lua模块化开发方法的一优选实施例的流程图。
图2为图1所示实施例的系统架构图。
图3为图1所示实施例的nginx配置文件架构图。
具体实施方式
为使本发明实施的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行更加详细的描述。在附图中,自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。所描述的实施例是本发明一部分实施例,而不是全部的实施例。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。下面结合附图对本发明的实施例进行详细说明。
图1为本发明的方法的流程图,图2为系统架构图。
参考附图,本发明基于openresty的lua模块化开发方法主要包括以下步骤:
步骤一、openresty执行到某一阶段时,获取模块化配置单元3中第一个lua模块对应的lua模块名称31、模块开关32以及对应的配置文件路径33;
步骤二、根据所述lua模块名称31,在模块化处理流程单元5的模块注册文件52中获取其在当前阶段注册的回调函数;
步骤三、根据所述lua模块所对应的配置文件路径33来获取相应模块的配置文件11;
步骤四、根据所述模块开关32的开关配置判断当前模块是否开启,若是,则采用当前lua模块的模块配置文件11作为参数调用所述回调函数所对应的函数代码41,若否,则返回步骤一,检查模块化配置单元3中下一个lua模块的配置,直至执行完所述模块化配置单元3所有lua模块。
其中,在步骤一中,openresty执行到某一阶段时,会调用当前系统子配置文件2中的阶段执行指令21,阶段执行指令21会执行模块化处理流程单元5中记录的阶段执行指令脚本51;阶段执行指令脚本51会根据系统配置单元6中配置的文件路径获取模块化配置单元3中第一个lua模块对应的lua模块名称31、模块开关32以及对应的配置文件路径33;在步骤二中,根据模块名称31在模块化处理流程单元5中存的模块注册文件52获取当前模块在当前阶段注册的回调函数53,回调函数53的函数代码实现41存在模块代码实现单元4中。
以下对本发明具体描述。
本发明基于openresty的lua模块化开发框架,如图2所示,主要包括以下单元:
模块配置单元1,存储有配置文件,用于提供函数代码41实现的参数;例如存放自定义lua模块的配置的lua_conf文件夹。
系统子配置单元2,存储有阶段执行指令21;例如lua_include_conf文件夹,该文件夹内存放一个单独的的nginx配置文件,内容如图3所示nginx配置文件,能够将access_by_lua_file等指令进行封装。此文件使用时需要被nginx.conf引用,已经将各个执行阶段和对应脚本封装。
模块化配置单元3,用于记录lua模块名称31、模块开关32以及对应的配置文件路径33;如lua_moudles_conf文件夹,文件夹中放入自定义的module_conf模块化配置文件,其中记录哪些模块生效,这个模块使用哪一个配置文件。
模块代码实现单元4,用于存放lua模块的回调函数的函数代码41;
模块化处理流程单元5,包含阶段执行指令脚本51,用于按配置依次执行各个模块的回调函数,以及包含模块注册文件52,用于获取lua模块在执行阶段中注册的回调函数;
系统配置单元6,用于存储lua模块的路径。
在openresty中当执行到固定的阶段,就会根据include后配置的文件调用相应的xxx_by_lua_file(图3),在xxx_by_lua_file所调用的固定的脚本文件中会获取module_conf所记录的模块化配置文件并打开,依次遍历模块化配置文件,根据其记录的lua模块名称在lua模块注册文件中查找此lua模块在当前这个阶段注册的回调函数,并根据模块化配置中配置的config获取此模块执行时需要的模块配置文件,将模块配置作为参数调用注册的回调;在依次遍历执行完成之后,继续下一个阶段的处理。
最后需要指出的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (6)

1.一种基于openresty的lua模块化开发方法,其特征在于,包括以下步骤:
步骤一、openresty执行到某一阶段时,获取模块化配置单元(3)中第一个lua模块对应的lua模块名称(31)、模块开关(32)以及对应的配置文件路径(33);
步骤二、根据所述lua模块名称(31),在模块化处理流程单元(5)的模块注册文件(52)中获取所述lua模块在当前阶段注册的回调函数;
步骤三、根据所述lua模块所对应的配置文件路径(33)来获取所述lua模块的配置文件(11);
步骤四、根据所述模块开关(32)的开关配置判断所述lua模块是否开启,若是,则采用所述lua模块的配置文件(11)作为参数调用所述回调函数所对应的函数代码(41),若否,则返回步骤一,检查模块化配置单元(3)中下一个lua模块的配置,直至执行完所述模块化配置单元(3)所有lua模块。
2.如权利要求1所述的基于openresty的lua模块化开发方法,其特征在于,所述步骤一中,根据系统配置单元(6)中配置的文件路径获取模块化配置单元(3)中所记录的lua模块名称(31)、模块开关(32),对应的配置文件路径(33)。
3.如权利要求2所述的基于openresty的lua模块化开发方法,其特征在于,所述步骤一中,系统配置单元(6)中配置的文件路径由执行指令脚本(51)读取后执行。
4.如权利要求3所述的基于openresty的lua模块化开发方法,其特征在于,所述步骤一中,openresty执行到某一阶段时,首先调用当前系统中的阶段执行指令(21),再由所述阶段执行指令(21)执行所述阶段执行指令脚本(51)。
5.如权利要求4所述的基于openresty的lua模块化开发方法,其特征在于,所述步骤二中,所述阶段执行指令(21)存储于系统子配置单元(2)中。
6.如权利要求1所述的基于openresty的lua模块化开发方法,其特征在于,所述步骤三中,所述配置文件(11)存储于模块配置单元(1)中。
CN201710615855.9A 2017-07-26 2017-07-26 一种基于openresty的lua模块化开发方法及开发框架 Expired - Fee Related CN107479878B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710615855.9A CN107479878B (zh) 2017-07-26 2017-07-26 一种基于openresty的lua模块化开发方法及开发框架

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710615855.9A CN107479878B (zh) 2017-07-26 2017-07-26 一种基于openresty的lua模块化开发方法及开发框架

Publications (2)

Publication Number Publication Date
CN107479878A CN107479878A (zh) 2017-12-15
CN107479878B true CN107479878B (zh) 2021-02-05

Family

ID=60597784

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710615855.9A Expired - Fee Related CN107479878B (zh) 2017-07-26 2017-07-26 一种基于openresty的lua模块化开发方法及开发框架

Country Status (1)

Country Link
CN (1) CN107479878B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109814915B (zh) * 2018-12-29 2022-07-22 天津字节跳动科技有限公司 基于lua的参数配置方法、装置、介质和电子设备
CN110377367B (zh) * 2019-07-24 2022-05-03 广州虎牙科技有限公司 组件配置方法、装置、电子终端及计算机可读存储介质
CN113505067B (zh) * 2021-07-09 2024-02-20 上海沄熹科技有限公司 基于openresty的分布式数据库tpc-c测试优化方法及系统
CN114461296B (zh) * 2021-12-29 2024-01-02 天翼云科技有限公司 基于Openresty的服务平台开发及访问方法
CN114793245B (zh) * 2022-06-22 2022-09-27 杭州又拍云科技有限公司 一种灵活可配置的流式信息处理方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102999371A (zh) * 2012-12-04 2013-03-27 Tcl通讯(宁波)有限公司 基于Lua脚本的人机界面开发方法及系统
CN105677302A (zh) * 2014-11-17 2016-06-15 阿里巴巴集团控股有限公司 一种应用程序模块化开发方法以及装置
CN106339229A (zh) * 2016-08-31 2017-01-18 虎扑(上海)文化传播股份有限公司 一种针对移动平台的混合开发方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102999371A (zh) * 2012-12-04 2013-03-27 Tcl通讯(宁波)有限公司 基于Lua脚本的人机界面开发方法及系统
CN105677302A (zh) * 2014-11-17 2016-06-15 阿里巴巴集团控股有限公司 一种应用程序模块化开发方法以及装置
CN106339229A (zh) * 2016-08-31 2017-01-18 虎扑(上海)文化传播股份有限公司 一种针对移动平台的混合开发方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
安装NGINX+lua+openresty开发环境配置全过程;大自然的风;《https://www.cnblogs.com/zdz8207/p/Nginx-lua-openresty.html》;20160119;全文 *

Also Published As

Publication number Publication date
CN107479878A (zh) 2017-12-15

Similar Documents

Publication Publication Date Title
CN107479878B (zh) 一种基于openresty的lua模块化开发方法及开发框架
US7937624B2 (en) Method for handling a detected error in a script-based application
CN106557470B (zh) 数据提取方法和装置
CN110162344B (zh) 一种隔离限流的方法、装置、计算机设备及可读存储介质
CN108632533A (zh) 一种相机的控制方法、移动终端及计算机可读存储介质
CN108809683A (zh) 部署云应用系统的方法及装置
CN104899068A (zh) 使用容器进行多进程启动的方法及装置
CN111694640B (zh) 数据处理方法、装置、电子设备及存储介质
CN106997313B (zh) 一种应用程序的信号处理方法、系统及终端设备
CN114579091B (zh) 跨操作系统的机器人流程自动化系统及方法
CN115329170A (zh) 网页抓取方法、装置、设备以及存储介质
CN107491298A (zh) 一种按钮对象自动扫描方法及系统
CN102402455A (zh) 调用动态链接库的方法和装置
CN111435227B (zh) 一种智能家居设备测试方法、装置、设备及介质
CN112114789A (zh) 一种业务开发方法及设备
CN108595178B (zh) 一种基于hook的数据采集方法、装置及设备
US20190332992A1 (en) Cross domain integration in product lifecycle management
CN114518917B (zh) 算法模块调度方法、算法模块调度装置以及可读存储介质
CN114741172B (zh) 人工智能模型的算子调度方法、装置、设备及存储介质
CN109857642A (zh) 一种ui自动化脚本的阻塞式调试方法及调试工具
CN105791514A (zh) 一种应用启动监测方法及装置
CN111913721B (zh) 自动化部署方法、装置、设备及存储介质
CN109683994B (zh) 确定视图构建时间的方法、装置、存储介质及电子设备
CN111984275A (zh) 基于cpu架构类型的系统部署方法、系统、终端及存储介质
CN106648870A (zh) 一种服务的重启方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20210205

Termination date: 20210726

CF01 Termination of patent right due to non-payment of annual fee