nginx считает, что запрос отработан после того, как вызвана
ngx_http_finalize_request().
Ниже приведенный код цикла падает на вызове ngx_http_finalize_request,
как все-же правильно организовать непрерывную отдачу без буферизации?
static ngx_int_t ngx_http_my_handler ( ngx_http_request_t* r )
{
ngx_int_t rc;
ngx_chain_t out;
int i;
.....
for ( i = 0; i < 10; i++ )
{
.....
out.buf = b;
out.next = NULL;
// попытка отправить в сокет out.buf
ngx_http_output_filter(r, &out);
ngx_http_finalize_request(r, NGX_DONE);
}
return NGX_OK;
}
Как я понимаю, надо реорганизовать такой цикл, чтобы отправка
каждого буфера приводила к выходу из ngx_int_t ngx_http_my_handler(...),
с последующим возвращением в него за следующим буфером,
но организовать такое через NGX_AGAIN не получилось.
----- Original Message -----
From: "Igor Sysoev" <is@xxxxxxxxxxxxx>
To: <nginx-ru@xxxxxxxxx>
Sent: Thursday, July 19, 2007 12:23 PM
Subject: Re: Реализация непрыровной отдачи в модуле-handler
On Wed, Jul 18, 2007 at 11:10:04PM +0400, Denis Erygin wrote:
Про организацию непрерывной отдачи не нашел в ответе ....
nginx считает, что запрос отработан после того, как вызвана
ngx_http_finalize_request().
Насчет keep-alive понятно.
----- Original Message -----
From: "Igor Sysoev" <is@xxxxxxxxxxxxx>
To: <nginx-ru@xxxxxxxxx>
Sent: Wednesday, July 18, 2007 9:59 PM
Subject: Re: Реализация непрыровной отдачи в модуле-handler
On Wed, Jul 18, 2007 at 09:22:11PM +0400, Denis Erygin wrote:
>Допустим, что в функции ngx_http_*_handler(...) непрерывно строится
>цепочка буферов (chains),
>вопрос в том, как ее отдавать браузеру по частям (например цепочки по 10
>буферов) ?
>
>В этом случае нужно принудительно выставить "Connection: keep-alive"
>(как?),
>и сделать запись в сокет.
r->keepalive = 1
но "Connection: keep-alive" для непрерывной отдачи по частям не нужен.
--
Игорь Сысоев
http://sysoev.ru