Hello!
2014-03-12 3:06 GMT-07:00 微光:
> 请教一下,lua-nginx-module是否有提供一种方式,在当前请求的内存池中注册一个cleanup handler?
> 这样,当该内存池被清理(即请求结束),就能够根据需要做相应的处理了。
>
目前已经有两种做法了:
1. 在 log_by_lua 里做自己的请求清理工作。
2. 自己利用 ffi.new() 创建一个 struct 类型的 cdata,然后用 ffi.gc 注意一个 Lua 回调,最后把这个
cdata 挂到当前请求的 ngx.ctx 表里面去。这样 ngx.ctx 回收时,你的 cdata
对应的回调也会被调用。考虑下面这个例子:
$ luajit -e 'local ffi = require "ffi" local a = ffi.new("struct {
char a; }") ffi.gc(a, function () print("cleaning up") end)'
cleaning up
当然,第二种做法的即时性差一些,毕竟依赖于 Lua GC.
由于已经有两种做法了,我不太想再实现第三种做法。
Regards,
-agentzh