ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Задержказапросов



Здравствуйте,
У меня возникла необходимость задерживать обработку запросов клиентов (мне
нужно, чтобы с одного 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;
  }
  
  ...

}




 




Copyright © Lexa Software, 1996-2009.