2015-06-08 37 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