Задержказапросов
Stanislav
stan.sm at gmail.com
Wed Jul 25 10:23:47 MSD 2007
Здравствуйте,
У меня возникла необходимость задерживать обработку запросов клиентов (мне
нужно, чтобы с одного IP на fastcgi backend передавалось на обработку не более
одного запроса одновременно). Для этого, я так понял, мне нужно использовать
ngx_add_timer для задержки запросов, которые пришли в то время, когда уже другие
запросы с того IP обрабатывались. Я добавляю этот функционал в limit_zone_module
и у меня вобщем-то единственная проблема - как мне продолжить обработку запроса
в моём event handler'e ?
Есть мнение, что нужно продолжать вызов handler'ов со следующих фаз так, как это
реализовано в ngx_http_core_run_phases() - правильно ли это, или же есть
какой-то другой путь ? :)
Код:
----
void continue_processing(ngx_event_t *rev) {
ngx_connection_t *c;
c = rev->data;
// вот тут-то мне и нужно как-то продолжить обработку запроса
}
static ngx_int_t
ngx_http_limit_zone_handler(ngx_http_request_t *r)
{
...
if( <some condition> ) {
ngx_event_t *rev;
rev = ngx_pcalloc(r->pool, sizeof(ngx_event_t));
ngx_memzero(rev, sizeof(ngx_event_t));
rev->handler = continue_processing;
rev->data = r->connection;
ngx_add_timer(rev, 1000);
return NGX_AGAIN;
}
...
}
More information about the nginx-ru
mailing list