在处理请求后是否可以从 VCL 调用模块函数?
Is it possible from VCL to invoke a module function after a request has been processed?
理想情况下,我想做这样的事情:
sub vcl_after_response_is_sent {
mymod.f(req, resp);
}
但我没有看到任何 builtin subroutine 可以让你这样做。还有其他方法可以实现吗?
这可以使用 PRIV_TASK 的免费功能来完成。
在模块的VCC中声明函数如下:
$Function VOID f(PRIV_TASK)
对函数的定义使用如下内容:
void finish_request(void*) {
}
VCL_VOID vmod_trace_request(VRT_CTX, struct vmod_priv* priv_task) {
priv_task->priv = /* Some non-null value */
priv_task->free = finish_request;
}
如果 f
然后从 vcl_recv
调用
sub vcl_recv {
mymod.f();
}
finish_request
将在 varnish 完成请求时调用。
理想情况下,我想做这样的事情:
sub vcl_after_response_is_sent {
mymod.f(req, resp);
}
但我没有看到任何 builtin subroutine 可以让你这样做。还有其他方法可以实现吗?
这可以使用 PRIV_TASK 的免费功能来完成。
在模块的VCC中声明函数如下:
$Function VOID f(PRIV_TASK)
对函数的定义使用如下内容:
void finish_request(void*) {
}
VCL_VOID vmod_trace_request(VRT_CTX, struct vmod_priv* priv_task) {
priv_task->priv = /* Some non-null value */
priv_task->free = finish_request;
}
如果 f
然后从 vcl_recv
sub vcl_recv {
mymod.f();
}
finish_request
将在 varnish 完成请求时调用。