2017-05-07 105 views
0

理想情況下,我想這樣做:請求處理後,VCL是否可以調用模塊函數?

sub vcl_after_response_is_sent { 
    mymod.f(req, resp); 
} 

但我看不出有任何builtin subroutine,可以讓你做到這一點。有沒有其他方式可以完成?

+0

爲什麼[vcl_fini](https://varnish-cache.org/docs/trunk/users-guide/vcl-built-in-subs.html#vcl-fini)無法啓動該任務? –

+0

是不是隻有在處理完所有請求後才被調用?我希望爲每個請求調用一些東西,在處理完後不久。 – rnickb

回答

0

這可以使用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將當清漆完成請求時調用。

相關問題