API(四)openresty中Lua与C代码交互的原理

本文介绍了OpenResty中Lua与C代码的交互方式,包括通过luaFFI的resty模块和系统级配置指令如lua_code_cache。还讨论了lua_package_path和lua_package_cpath对库路径的影响,以及require的路径搜索机制。同时,提到了ngx.configSDK用于获取配置参数,以及nginxC函数的返回值常量。
摘要由CSDN通过智能技术生成

一  openresty中Lua与C代码交互

说明:该篇只是'粗略'的建立知识体系,后续在'深入学习C语言后'会进行'深入探讨'

题外话: nginx和openresty'各自'做各自的事情,尽量'不要冲突'
​
补充: 

  1) nginx与lua的配合最好,这与'lua的特性'有关

  2) 目前与'js语言'的结合还有'欠缺','生态'还没建设起来

强调: 不是'所有的api'都可以出现在'所有'的指令中

++++++++++++ "分割线" ++++++++++++ 
​
深入学习openresty: 需要掌握'前置'知识

  1) 'nginx'
  
  2) lua、c、perl

  3) 构建、开发、测试、部署

目的:为后面构建'waf'、'apigateway'打好基础

①  lua FFI

1) openresty最'重要'的功能:  

备注: 'lua代码'执行,实际上是通过'nginx的C函数'执行的

2) 而lua与nginx的C代码交互有'两种'方式

方式1: 'resty等'模块等都是'通过lua提供的ffi方式'与C代码交互  --> "常用"

3) 案例:以使用'lua-resty-string'模块的'resty.string'为例

lua与c交互 

lua-resty-string

②  系统级配置指令

1) lua_code_cache	    仅仅针对'*_by_lua_file'文件是否cache,不能针对"block和''"

2) lua_package_path	    用'lua'写的'lua外部库路径' --> ".lua文件"

3) lua_package_cpath	用'C'写的lua外部库路径     --> ".so"动态库文件

说明: 系统级的指令会影响'lua代码'的使用

lua_code_cache

++++++++++ "lua_code_cache off 生效的注意事项" ++++++++++

1) '调测'阶段,设置为'lua_code_cache off',修改代码后可以'实时'看到代码变化后的'效果'

备注: 生产采用'默认值 on'即可,否则'影响'性能

2) *.by_lua_file  引用的'lua文件',将'重新'加载

备注: 不会重新加载'*.by_lua_file file'中的'dofile'或'loadfile'加载的lua模块文件

ps: 可以将'dofile或loadfile'加载内容放到'init_by_lua*'或file中通过'require方式'加载

3) nginx.conf中'内联'编写的lua代码,除非'reload|restart',否则'不会'立即生效

  形如: '*_by_lua'和'*_by_lua_lock'

③  谈谈路径问题

nginx的相对路径问题

1) '*_by_lua_file'  相对路径

备注: rpm包是相对'--prefix'指定的路径

++++++++++ "遗留的问题" ++++++++++

1) lua_package_path 与 'require'、'loadfile'、'dofile'关系

使用 require 函数加载模块时,会按照'lua_package_path'环境变量中设置的路径来搜索模块文件

2) package.path '和' lua_package_path关系?

备注:代码中通过 'package.path = package.path ..'形式'拼接' --> '动态改变'

lua_package_path lua_package_path   lua_package_path 

不同lua项目存在不同lua代码目录中,如何设置包搜索路径

1) 'require'即在的模块'字符串'就会替换'对应的问号?'

2) $prefix 似乎'只能'用在'lua_package_path'中  --> 待'实验'

3) 探究';;'到底是'什么'?

4) 遗留: 如果在"shell环境设置 export LUA_PATH",然后启动'openresty',是否会引用?

说明: 'resty'只是openresty提供一个'小工具',不会加载'nginx.conf'配置文件

思考: init.lua通常用来'干什么'?

c++调用lua 

观察: 一个'奇怪'的现象

明确: 'LUA_PATH环境变量'会影响'resty'

遗留: require加载的模块中调用'shell'模块,涉及'LUA_PATH'环境变量,会影响后续模块查找吗?

④  ngx.config取得配置参数SDK

${prefix} --> openresty'特有的变量'

⑤  答疑解惑

⑥  扩展

1)nginx 'C函数'有'五类'返回值常量

备注:通常'用不到',lua代码'返回C函数'的数值'可能'用到

 

++++++++++ "innode"相关lnux 操作 ++++++++++

ll -i

find . -inum 

df -i  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值