Re: Буферизация M-JPEG потока
Maxim Dounin
mdounin at mdounin.ru
Wed Sep 26 08:51:56 UTC 2012
Hello!
On Wed, Sep 26, 2012 at 04:21:25AM -0400, Александр Хованский wrote:
> Есть приложение, отдающее M-JPEG поток в реальном времени (как
> multipart/x-mixed-replace). Работает так: если в буфере сокета есть место,
> начинает писать туда текущий кадр. Соединение медленное - часть кадров
> пропускается.
>
> При прямом соединении работает нормально.
>
> Ставлю перед сервером NGINX. Буферизация отключена (и proxy_buffering off, и
> X-Accel-Buffering: no). Но всё равно несколько сот Кб (до мегабайта,
> примерно 10 кадров) где-то буферизуются, и образуют неустранимую задержку.
>
> Как это объяснить и как поправить?
При "proxy_buffering off" внутри nginx'а есть ровно один буфер,
используемый для обработки данных, размер его задаётся с помощью
директивы proxy_buffer_size. По умолчанию - 4k
(http://nginx.org/r/proxy_buffer_size).
Кроме того, на пути от бекенда к клиенту при использовании nginx'а
добавляется ещё два буфера сокетов - в nginx на приём от бекенда,
и на отправку к клиенту (последний можно ставить из nginx'а с
помощью параметра sndbuf директивы listen). В зависимости от
настроек операционной системы это может быть много.
--
Maxim Dounin
http://nginx.com/support.html
Подробная информация о списке рассылки nginx-ru