2015-06-08 33 views
2

我使用mod_proxy_fcgi与Debian Jessie上的apache 2.4和我的C++应用程序进行ServerSentEvents和libfcgipp。如何禁用apache2和mod_proxy_fcgi缓冲?

我的问题是,Apache仍然缓冲我的响应数据。我确认它没有被使用wireshark的libfcgipp库缓冲:通过spawn-fcgi启动fcgi应用程序后,数据会尽快发送到apache web服务器。但是在我的浏览器中(我用来测试,后来会有一个C++客户端),它在我“终止”/关闭了服务器应用程序中的发送请求后才显示出来。

所以我假设我需要为apache或mod_proxy_fcgi(或两者)禁用缓冲。但是我找不到有关如何执行此操作的相应文档。

+0

你有'mod_cache'模块吗? – umka

+0

它只在'mods-available'中,但不在'mods-enabled'中,所以我猜它没有启用。 – musicmatze

+0

我想我在这里使用了错误的术语。我的意思是“缓冲”,而不是“缓存”。 – musicmatze

回答

2

的几个注意事项,因为我只花了几个小时尝试找到这个问题的答案:

  1. 使用mod_proxy/mod_proxy_fcgi当它无法完全禁止输出缓冲,但是,你仍然可以以大块的形式进行响应。
  2. 看来,根据我的实验,在将输出刷新到浏览器之前,块必须至少有4096个字节。
  3. 可以使用mod_fastcgimod_fcgi模块禁用输出缓冲,但这些mod不像Apache 2.4那样流行/广泛使用。
  4. 如果启用了mod_deflate,并且没有为虚拟主机/目录/ etc设置SetEnv no-gzip 1。这是流数据,然后gzip将不允许缓冲区刷新,直到请求完成。

我测试的东西出来,看看如何最好地使用Drupal 8的新功能BigPipe的流请求到客户端,和我贴一些笔记this GitHub issue