Re: Re[2]: обработка POST & NGX_AGAIN
Valery Kholodkov
valery+nginxru на grid.net.ru
Пн Ноя 30 14:06:34 MSK 2009
----- Alexandre Kalendarev <akalend at mail.ru> wrote:
> Валерий,
>
> а какой выход?
> как дождаться чтоб принять оставшуюся часть
>
> да, судя по логам:
> r->request_body->buf->start=r->request_body->buf->pos =r->request_body->buf->last
Зависит от хэндлера.
В content-хэндлерах так:
rc = ngx_http_read_client_request_body(r, <хэндлер тела>);
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
return rc;
}
return NGX_DONE;
В хэндлерах фаз так:
if(r->request_body == NULL) {
rc = ngx_http_read_client_request_body(r, <хэндлер тела>);
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
return rc;
}
return NGX_DONE;
}
// Всё ещё принимаем тело?
if(r->request_body->rest) {
return NGX_DONE;
}
[.. в этом месте тело полностью принято ..]
Хэндлер тела должен завершить запрос или возобновить хэндлер фазы, иначе запрос зависнет. Приблизительно так:
static /* или нет static */ void
хэндлер_тела(ngx_http_request_t *r)
{
ngx_int_t rc;
[.. в этом месте тело полностью принято ..]
rc = вызвать_хэндлер_фазы(r);
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
ngx_http_finalize_request(r, rc);
}
}
--
Regards,
Valery Kholodkov
Подробная информация о списке рассылки nginx-ru