nginx filters programming
Igor Sysoev
is at rambler-co.ru
Fri Dec 23 23:25:44 MSK 2005
On Fri, 23 Dec 2005, Alexey N. Kovyrin wrote:
> Igor Sysoev пишет:
>> On Fri, 23 Dec 2005, Alexey N. Kovyrin wrote:
>>
>>> Igor Sysoev пишет:
>>>>> 2) Какие подводные камни могут быть при простом добавлении контента вот
>>>>> в таком виде (да и вообще, правилен ли подход)? :
>>>>>
>>>>> ngx_chain_t head, tail, *cur;
>>>>> ...
>>>>> head.next = in;
>>>>> ...
>>>>> cur = in;
>>>>> while (cur->next) cur = cur->next;
>>>>> cur->next = &tail;
>>>>> cur->buf->last_buf = 0;
>>>>> tail->buf->last_buf = 1;
>>>>>
>>>>> return ngx_http_next_body_filter(r, &head);
>>> В таком варианте на пустых html-файлах получается ошибка в логах:
>>> zero size buf in writer t:0 r:0 f:0 00000000 00000000-00000000 080CF3C8
>>> 0-0 while sending response to client....
>>>
>>> Как-то я не совсем понимаю, как этого избежать...
>>
>> cur->buf->last_buf = 0;
>> +cur->buf->sync = 1;
>> tail->buf->last_buf = 1;
> Класс! Спасибо - работает! :-) А можно узнать, почему? :-) В чем функция
> этого sync?
nginx ловит пустые буфера, потому что это, как правило, ошибка в nginx'е.
Кроме буферов данных, могут быть служебные буфера с маркерами last и flush.
Они могут быть пустыми, а могут быть совмещены с данными. При разработке
SSI понадобилось убирать маркер last, но для избежания ситуации zero size buf,
был создан маркер-заглушка sync, поскольку манипуляции с цепочками
не всегда удобны.
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list