在redis和nginx中都潜入了Lua环境用于快速上手开发。但如何理解Lua以及Lua与宿主环境的交互是需要掌握的。
首先是Lua本身,打开5.1的lua版本开始编译后最后生成一个lua的可执行文件,这其实就是一个包含了Lua虚拟机的终端.。所以其实在不管redis也好nginx也好,也是在其中生产了一个Lua环境(虚拟机),然后将nginx里面/redis里面的一些函数暴漏出去,到达在Lua里面操作宿主环境的效果。
其实lua.c很简单:核心就是调用创建一个lua虚拟机环境 lua_State,然后卡你是接受输入的字符将其解析后给虚拟机执行。 liblua.a是核心静态库。
也就是说lua.c提供了一个最佳范例,让其他宿主服务如何将其加载进去。
在宿主中创建完Lua的State后,我们的目的是为了操作宿主里面的东西,所以需要将宿主里面的功能注入到State里面去以便Lua操作。
(别忘记初衷是为了理解redis/nginx如何和lua交互的,要从这里开始找切入口,然后再遇到问题后再展开,一股插进lua的源代码中肯定效率不高。最好的办法是从redis里面入手看redis是如何实现和Lua的交互的,这样才能有对Lua虚拟机的高效率地理解。)看redis是如何调用Lua的Capi的,调用了哪些