hive是一个简单的LUA应用框架,目前基于LUA 5.3.4.
主要提供了文件沙盒,文件热加载以及一些基础的服务程序底层支持.
同时支持Windows, Linux, MacOS三平台,编译器必须支持C++14,需要安装cmake.
在编译hive之前,应先编译安装lua,以及luna库:
cd luna
mkdir build
cd build
cmake ..
make
然后到hive目录执行一样的make流程即可,注意执行时需要luna库在当前目录下.
在hive中,用户主要通过import函数加载lua文件.
- import为每个文件创建了一个沙盒环境,这使得各个文件中的变量名不会冲突.
- 通过import加载文件时,可以通过环境变量设置根路径,如:
LUA_ROOT=/data/script/
- 在需要的地方,用户也可以同时使用require加载所需文件.
- 多次import同一个文件,实际上只会加重一次,import返回的是文件的环境表.
- 文件时间戳变化是,会自动重新加载.
程序启动后,首先加载入口文件.
如果程序需要持续执行,而不是仅仅执行一遍,那么在hive上定义一个名为'run'的函数.
这样hive框架会一直循环的调用hive.run
,如果程序想要退出,那么简单的将hive.run
赋值为nil即可.
在循环调用的过程中,如果发现入口文件时间戳变化,会自动重新加载.
用户可以注册信号hive.register_signal(signo)
,注册后,可以通过掩码hive.signal
来检视.
注意,用户需要在'hive.run'中调用sleep,否则会出现CPU完全占用的情况.
count = count or 0;
function hive.run()
count = count + 1;
if count > 10 then
hive.run = nil;
end
hive.sleep_ms(2000);
end
一旦hive.run
函数执行时抛出错误,hive将立即退出,并将错误信息写入entry.lua.err文件中.
这里entry.lua指的是入口文件的文件名,建议一般的服务程序在hive.run
函数中自行捕获错误.