Несколько непонятностей по nginx
Александр Ворона
voron at amhost.net
Sat Apr 21 23:24:26 MSD 2007
Igor Sysoev пишет:
> On Sat, Apr 21, 2007 at 05:44:07PM +0400, Александр Ворона wrote:
>
>> Igor Sysoev пишет:
>>> Дело в том, что lighttpd не использует EPOLLET, а nginx - использует.
>>> Когда патч в ядре ограничивает объём передаваемых данных, то происходит
>>> следующее - EPOLLET фиксирует состояние, что буфер свободен, об этом
>>> сообщается приоложению (nginx'у), он делает sendfile. sendfile быстро
>>> передаёт ограниченный объём, буфер по-видимому после этого полностью
>>> свободный и новое событие не приходит.
>> а как тогда должен отрабатывать nginx, если бы sendfile() действительно
>> был неблокирующим(за что собственно и боремся) и быстро передавал
>> ограниченный обьём?
>
> sendfile должен вернуть, сколько он смог передать. nginx это фиксирует,
> выствляет таймаут на передачу и оставляет этот сокет в покое, пока
> epoll снова не сообщит об освободившемся месте.
>
те sendfile() фактически должен сказать : "я пхнул в сокет столько-то и
ушёл". nginx _после_ вызова sendfile() выставляет таймаут для сокета, в
который sendfile() пхнул данные. И если данные уже успели улететь до
постановки таймаута - события не придёт?
More information about the nginx-ru
mailing list