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