Comet 与 uwsgi 和 nginx 一起,如何关闭输出缓冲区?

Comet 与 uwsgi 和 nginx 一起,如何关闭输出缓冲区?

如何防止 Nginx 缓冲我的 uwsgi 应用程序的输出?对于我的 comet 样式应用程序,我使用长轮询,现在请求已缓冲。

我试图减小缓冲区的大小,但不允许将其设置uwsgi_buffer_sizeuwsgi_buffers0。也uwsgi_max_temp_file_size不起作用(尽管手册建议这样做)。

我怎样才能做到这一点?

答案1

直到几分钟前,这还是不可能的。nginx 总是会缓冲所有 uwsgi 和 scgi 响应,并且没有配置可以改变这一点。

我有提交了 nginx 补丁(并且它被接受了)并且从下一个版本开始有两种方法可以禁用 uwsgi 请求的缓冲:

uwsgi 从不缓冲响应,因此不需要进行任何配置。

答案2

为什么不直接使用 uwsgi 嵌入的 http-router/load-balancer ?它不进行缓冲,特别是对于 comet/websockets 应用程序。您可以使用 nginx 将静态文件映射到另一个域。

答案3

尝试使用 uwsgi_max_temp_file_size = 0

答案4

Nginx“代理”模块有一个指令,它被称为proxy_buffering on|off,它完全符合您的要求,关闭缓冲并同步代理上游输出。但据我所知,FastCGI 和 UWSGI 模块都没有此功能。

顺便说一句,即使proxy_bufferingoff,您也可能会注意到由于 OS TCP 堆栈缓冲而导致的轻微延迟。

相关内容