1. 程式人生 > >openresty原始碼剖析——lua程式碼的載入

openresty原始碼剖析——lua程式碼的載入

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 204 ngx_int_t 205 ngx_http_lua_cache_loadfile(ngx_log_t *log, lua_State *L, 206     const u_char *script, const u_char *cache_key) 207 { 208 ... 232     rc = ngx_http_lua_cache_load_code(
log, L, (char *) cache_key); 233     if (rc == NGX_OK) {//程式碼在全域性變數table中存在,則返回 234 ... 237         return NGX_OK; 238     } 239 ... 250     rc = ngx_http_lua_clfactory_loadfile(L, (char *) script);// 251 ... 279     rc = ngx_http_lua_cache_store_code(L, (char *) cache_key);
280 ... 285     return NGX_OK; 286 287 error: 288 ... 294 } 

程式碼載入分成3步完成

ngx_http_lua_cache_load_code 從lua_state的全域性變數table中載入程式碼,如果全域性快取中有就返回

ngx_http_lua_clfactory_loadfile 用自定義的函式從檔案中載入程式碼

ngx_http_lua_cache_store_code 把程式碼存放到lua_state的全域性變數table中