对了还有一个问题:
刚刚我在init_worker_by_lua 阶段获取了服务器列表:
http {
init_worker_by_lua_file "/path/to/init_worker.lua";
server {
location / {
rewrite_by_lua_file "/path/to/rewrite.lua";
}
}
init_worker.lua的内容:
server_list=get_server_list()
然后在 rewrite_by_lua阶段中试图访问这个变量:
rewite.lua的内容:
if not server_list then
ngx.log(ngx.ERR,"server_list is nil" )
return
end
发现将lua code cache 开关置为off的时候,server_list为空,只有为on的时候才能获取。
我的猜想是:在off的时候,为每个请求创建一个VM,这样server_list就为空了,而在on的时候,只是一个worker中的所有请求共用一个vm,这样可以拿到。
希望指教下,能否说明下这个原因呢?。。。
在 2016年11月25日星期五 UTC+8下午5:55:52,wwaz wwaz写道:
有这样的情况:
server {
location /abc {
rewrite_by_lua_file "/path/to/hello.lua";
}
}
在hello.lua中:
所有的逻辑都用一个run函数包装,最后再脚本模块调用 _M.run()这个run函数
但是我有一些初始化的操作,比如获取服务器列表这些操作,只需要执行一次的,那么放在哪里合适呢?也放在run函数里面么?
这样是不是每次请求来了都会执行获取服务器列表的操作?
这样会对性能有影响么?
还是说lua执行速度很块,即使每次请求时都执行这些获取服务器的操作也不会有影响?
如果有影响,是不是要把获取服务器列表的这种操作不要放在run里面?还是放在哪个地方呢?
放在init_by_lua阶段?这样又多了脚本不太好管理。