Cometa com o uwsgi e o nginx, como desligar o buffer de saída?

5

Como posso evitar que o Nginx armazene em buffer a saída do meu aplicativo uwsgi? Para meu aplicativo de estilo cometa, estou usando long polling e as solicitações agora são armazenadas em buffer.

Eu tentei reduzir o tamanho dos buffers, mas não posso colocar uwsgi_buffer_size e uwsgi_buffers em 0. Também uwsgi_max_temp_file_size não funciona (mesmo que o manual sugira isso).

Como posso fazer isso?

    
por Peter Smit 02.08.2011 / 21:20

4 respostas

13

Até alguns minutos atrás, isso não era possível. O nginx sempre armazenaria em buffer todas as respostas uwsgi e scgi, e nenhuma configuração mudaria isso.

Eu enviei um patch para o nginx (e ele foi aceito) e da próxima versão em Existem dois métodos para desabilitar o buffer para solicitações do uwsgi:

  • coloque uwsgi_buffering off na configuração do nginx
  • envie um cabeçalho X-Accel-Buffering 'não' na resposta

O uwsgi nunca armazena a resposta, então nenhuma configuração é necessária para esse fim.

    
por 30.09.2011 / 14:32
1

Por que você não usa diretamente o roteador http / load integrado do uwsgi? Ele não faz buffer especificamente para o aplicativo comet / websockets. Você pode usar o nginx para arquivos estáticos, mapeando-os para outro domínio.

    
por 03.08.2011 / 16:45
0

Tente com uwsgi_max_temp_file_size = 0

    
por 03.08.2011 / 00:57
0

O módulo "proxy" do Nginx tem uma diretiva para isso, chamado proxy_buffering on|off , que faz exatamente o que você deseja , desliga o buffer e faz proxy da saída upstream de forma síncrona. Mas o AFAIK nem os módulos FastCGI nem o UWSGI o possuem.

BTW mesmo quando proxy_buffering for off , você poderá notar pequenos atrasos devido ao buffer de pilha do OS TCP.

    
por 03.08.2011 / 08:19