ПРОЕКТЫ 


  АРХИВ 


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]

Re: Re[2]: upstream



On Tue, Apr 22, 2008 at 11:44:18PM +0300, Alexander Dolgarev wrote:

> У меня была схожая проблема пока для входной цепочки для каждого буфера не
> выставлял
> cl->buf->pos = cl->buf->last = NULL;

Это неправильно. Нужно так:

cl->buf->pos = cl->buf->last;

> 2008/4/21 anon <linux-kernel@xxxxxxx>:
> 
> > вот мой body_filter_module
> > ...
> > b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
> >        for(cl = in ; cl ; )
> >        {
> >                size = cl->buf->last - cl->buf->pos;
> >                el = ngx_array_push_n(r->news, size);
> >                memcpy(el, cl->buf->pos, size);//я копирую себе содержимое
> > тело ответа
> >                //cl->buf->pos = cl->buf->last;если не делать эти строчки
> > ответ от бекенда перестает ситаться
> >                //cl->buf->last = cl->buf->start;
> >                if (cl->buf->last_buf)
> >                {
> >                        *((char *)ngx_array_push(r->news)) = '\0';
> >                        //printf("news=%s\nend\n", (char *)r->news->elts);
> > //а тут я хочу создвть свою цепочку полжить в нее буфер и обработанные
> > данные и выдать клиенту
> > //как правильно вызвать следующий фильтр с моей цепочкой
> >                        //return ngx_http_next_body_filter(r, in);
> >                }
> >                cl = cl->next;
> >        }
> > как правильно обновить цепочки чтобы от апстрима, чтобы продолжали
> > приходит данные и я их накапливал у себя в памяти чтобы потом отправить
> > после некоторой модификации
> > конкретно затык происходит в ngx_http_upstream.c:3553 в
> > ngx_chain_update_chains что то с цепочками не так обрабатывается,
> > если я из своего фильтр модуля не вызываю ngx_http_next_body_filter(r,
> > in), то при обновлениии цепочек получаю free - NULL busy - not NULL out -
> > NULL
> > а должно быть(когда сразу из модуля вызываю http_next_body_filter(r, in)
> > free - not NULL busy - not NULL out - NULL
> > какой код нада возвращать из моего фильтра, если я не отправляю цепочки
> > следующему фильтру а просто у себя данные собираю.
> >
> > Подскажите, куда копатью
> > Спасибо.
> >
> > -----Original Message-----
> > From: Sergey Bochenkov <bachan@xxxxxxxxx>
> > To: nginx-ru@xxxxxxxxx
> > Date: Mon, 21 Apr 2008 14:00:29 +0400
> > Subject: Re: upstream
> >
> > >
> > > А в чем проблема? Как пробовали?
> > > В рассылке по main_filter_need_in_memory и NGX_AGAIN искали?
> > >
> > > Архив рассылки есть на gmane.org.
> > >
> > > > как организовать такую штуку: получать ответ от апстрима - сохранить
> > его весь в памяти обработать и потом послать пользователю.
> > > > Пробую серез фильтр модуль - не могу разобраться как цепочки
> > обрабатывать а потом отослать все
> > > > Подскажите
> > > >
> > > >
> > > >
> > >
> > >
> > >
> >
> >

-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.